Qt中數據編程主要分爲如下兩點:
一、利用qt提供類 訪問數據庫或者成爲簡單的數據庫編程
二、數據庫編程中引入model/view編程模型數據庫
基於model/view數據庫編程:編程
qt提供model類: QSqlTableModel類 QSqlQueryModel類
Qt提供view類: QTableViewui
須要掌握兩個知識:
(1)model/view編程步驟
(2)qt數據庫編程步驟this
案例:經過界面view控件實現對數據庫中的一張表(姓名、年齡、成績)中記錄進行操做
(1)放置一個view控件 QTableView,設置屬性
(2)鏈接數據庫
(3)實例化模型和數據庫表創建關聯
(4)設置模型表頭
(5)對模型數據進行 增長 刪除 修改
(6)提交或者撤銷spa
工程的參考代碼以下:
widget.h中內容:3d
#ifndef WIDGET_H
#define WIDGET_Hblog
#include <QWidget>
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QItemSelectionModel>ci
namespace Ui {
class Widget;
}開發
class Widget : public QWidget
{
Q_OBJECTrem
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_btnSubmit_clicked();
void on_btnRevert_clicked();
void on_btnInsert_clicked();
void on_btnDelete_clicked();
private:
Ui::Widget *ui;
QSqlTableModel *theModel;
QItemSelectionModel *theSelection;
QSqlDatabase db;
};
#endif // WIDGET_H
widget.cpp文件內容:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setAlternatingRowColors(true);
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("/home/hua/students.db");
if(!db.open())
{
qDebug()<<"connect error";
return;
}
theModel = new QSqlTableModel(this,db);
theModel->setTable("stu");
theModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
theModel->select();
ui->tableView->setModel(theModel);
theModel->setHeaderData(0,Qt::Horizontal,"姓名");
theModel->setHeaderData(theModel->fieldIndex("age"),Qt::Horizontal,"年齡");
theModel->setHeaderData(2,Qt::Horizontal,"成績");
theSelection = new QItemSelectionModel(theModel);
ui->tableView->setSelectionModel(theSelection);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btnSubmit_clicked()
{
bool ret = theModel->submitAll();
if(!ret)
{
qDebug()<<"save error";
}
}
void Widget::on_btnRevert_clicked()
{
theModel->revertAll();
}
void Widget::on_btnInsert_clicked()
{
int row = ui->tableView->currentIndex().row();
theModel->insertRow(row);
QModelIndex index = theModel->index(row,0);
theSelection->clearSelection();
theSelection->setCurrentIndex(index,QItemSelectionModel::Select);
theModel->setData(theModel->index(row,1),20);
}
void Widget::on_btnDelete_clicked()
{
int row = ui->tableView->currentIndex().row();
theModel->removeRow(row);
}
main.cpp文件內容:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
QSqlQueryModel類:只讀模型,查看數據庫中,不能修改開發中QSqlQueryModel類和QSqlQuery類一塊兒配合進行數據庫開發