QT基於model/view數據庫編程2

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類一塊兒配合進行數據庫開發

相關文章
相關標籤/搜索