網站首頁 編程語言 正文
在上一篇博文《C/C++ Qt 數據庫QSql增刪改查組件應用》介紹了Qt中如何使用SQL操作函數,并實現了對數據庫的增刪改查等基本功能,從本篇開始將實現數據庫與View組件的綁定,通過數據庫與組件關聯可實現動態展示數據庫中的表記錄。
我們先以TreeView
組件為例,簡單介紹一下如何實現組件與數據的綁定,首先我們需要創建一個表并插入幾條測試記錄,運行如下代碼實現建庫建表.
#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
組件內,這段代碼如下:
#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組件上:
原文鏈接:https://www.cnblogs.com/LyShark/p/15654747.html
相關推薦
- 2022-02-07 使用laravel框架開發接口時post請求報錯419,get請求正常
- 2021-10-12 shell實現Fisher–Yates?shuffle洗牌算法介紹_linux shell
- 2022-08-20 python深入講解魔術方法_python
- 2022-12-21 PyGame實現初始化導入所有模塊方法詳解_python
- 2022-12-27 NSURLSession跨域重定向透傳HTTP?Header問題解決_IOS
- 2022-12-10 Android入門之計時器Chronometer的使用教程_Android
- 2022-10-23 Kubernetes?k8s?configmap?容器技術解析_云其它
- 2022-04-11 圖文詳解C#中的協變與逆變_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支