在上一篇博文《C/C++ Qt 數據庫QSql增刪改查組件應用》介紹了Qt中如何使用SQL操作函數,并實現了對數據庫的增刪改查等基本功能,從本篇開始將實現數據庫與View組件的綁定,通過數據庫與組件關聯可實現動態展示數據庫中的表記錄。
我們先以TreeView
組件為例,簡單介紹一下如何實現組件與數據的綁定,首先我們需要創建一個表并插入幾條測試記錄,運行如下代碼實現建庫建表.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> #include <QSqlRecord> #include <iostream> #include <QStringList> #include <QString> #include <QVariant> #include <QDataWidgetMapper> #include <QtSql> void Init() { QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" ); db.setDatabaseName( "./lyshark.db" ); if (!db.open()) { std::cout << db.lastError().text().toStdString()<< std::endl; return ; } // 執行SQL創建表 db.exec( "DROP TABLE LyShark" ); db.exec( "CREATE TABLE LyShark (" "id INTEGER PRIMARY KEY AUTOINCREMENT, " "name VARCHAR(40) NOT NULL, " "age INTEGER NOT NULL)" ); // 逐條插入 db.exec( "INSERT INTO LyShark(name,age) VALUES('admin',22)" ); db.exec( "INSERT INTO LyShark(name,age) VALUES('lyshark',25)" ); db.exec( "INSERT INTO LyShark(name,age) VALUES('zhangsan',22)" ); db.exec( "INSERT INTO LyShark(name,age) VALUES('wangwu',22)" ); db.commit(); } MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui( new Ui::MainWindow) { ui->setupUi( this ); Init(); } |
執行建庫建表后,數據庫內記錄如下:
有了數據表以后,接著就需要將數據表中的記錄與View組件進行綁定,綁定組件首先需要調用QSqlQueryModel
查詢數據表中的記錄,當查詢到記錄以后,調用QItemSelectionModel()
將該記錄綁定到對應的模型中,最后調用ui->treeView->setModel(qryModel);以及ui->treeView->setSelectionModel(theSelection);將該模型顯示在TreeView
組件內,這段代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> #include <QSqlRecord> #include <iostream> #include <QStringList> #include <QString> #include <QVariant> #include <QDataWidgetMapper> #include <QtSql> #include <QStandardItem> #include <QStringList> #include <QStringListModel> // 定義數據模型指針 QSqlQueryModel *qryModel; // 數據模型 QItemSelectionModel *theSelection; // 選擇模型 QDataWidgetMapper *dataMapper; // 數據界面映射 MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui( new Ui::MainWindow) { ui->setupUi( this ); QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" ); db.setDatabaseName( "./lyshark.db" ); if (!db.open()) { std::cout << db.lastError().text().toStdString()<< std::endl; return ; } // 查詢數據表中記錄 qryModel= new QSqlQueryModel( this ); qryModel->setQuery( "SELECT * FROM LyShark ORDER BY id" ); if (qryModel->lastError().isValid()) { return ; } // 設置TableView表頭數據 qryModel->setHeaderData(0,Qt::Horizontal, "ID" ); qryModel->setHeaderData(1,Qt::Horizontal, "Name" ); qryModel->setHeaderData(2,Qt::Horizontal, "Age" ); // 將數據綁定到模型上 theSelection= new QItemSelectionModel(qryModel); ui->treeView->setModel(qryModel); ui->treeView->setSelectionModel(theSelection); ui->treeView->setSelectionBehavior(QAbstractItemView::SelectRows); } MainWindow::~MainWindow() { delete ui; } |
運行代碼后,程序會從數據庫內取出結果并輸出到TreeView組件上:
到此這篇關于C/C++ Qt 數據庫與TreeView組件綁定詳解的文章就介紹到這了,更多相關C++ Qt 數據庫與TreeView組件綁定內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/LyShark/p/15654747.html