網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
在上一篇博文《C/C++ Qt 數(shù)據(jù)庫(kù)QSql增刪改查組件應(yīng)用》介紹了Qt中如何使用SQL操作函數(shù),并實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)的增刪改查等基本功能,從本篇開(kāi)始將實(shí)現(xiàn)數(shù)據(jù)庫(kù)與View組件的綁定,通過(guò)數(shù)據(jù)庫(kù)與組件關(guān)聯(lián)可實(shí)現(xiàn)動(dòng)態(tài)展示數(shù)據(jù)庫(kù)中的表記錄。
我們先以TreeView
組件為例,簡(jiǎn)單介紹一下如何實(shí)現(xiàn)組件與數(shù)據(jù)的綁定,首先我們需要?jiǎng)?chuàng)建一個(gè)表并插入幾條測(cè)試記錄,運(yùn)行如下代碼實(shí)現(xiàn)建庫(kù)建表.
#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; } // 執(zhí)行SQL創(chuàng)建表 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(); }
執(zhí)行建庫(kù)建表后,數(shù)據(jù)庫(kù)內(nèi)記錄如下:
有了數(shù)據(jù)表以后,接著就需要將數(shù)據(jù)表中的記錄與View組件進(jìn)行綁定,綁定組件首先需要調(diào)用QSqlQueryModel
查詢數(shù)據(jù)表中的記錄,當(dāng)查詢到記錄以后,調(diào)用QItemSelectionModel()
將該記錄綁定到對(duì)應(yīng)的模型中,最后調(diào)用ui->treeView->setModel(qryModel);以及ui->treeView->setSelectionModel(theSelection);將該模型顯示在TreeView
組件內(nèi),這段代碼如下:
#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> // 定義數(shù)據(jù)模型指針 QSqlQueryModel *qryModel; // 數(shù)據(jù)模型 QItemSelectionModel *theSelection; // 選擇模型 QDataWidgetMapper *dataMapper; // 數(shù)據(jù)界面映射 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; } // 查詢數(shù)據(jù)表中記錄 qryModel=new QSqlQueryModel(this); qryModel->setQuery("SELECT * FROM LyShark ORDER BY id"); if (qryModel->lastError().isValid()) { return; } // 設(shè)置TableView表頭數(shù)據(jù) qryModel->setHeaderData(0,Qt::Horizontal,"ID"); qryModel->setHeaderData(1,Qt::Horizontal,"Name"); qryModel->setHeaderData(2,Qt::Horizontal,"Age"); // 將數(shù)據(jù)綁定到模型上 theSelection=new QItemSelectionModel(qryModel); ui->treeView->setModel(qryModel); ui->treeView->setSelectionModel(theSelection); ui->treeView->setSelectionBehavior(QAbstractItemView::SelectRows); } MainWindow::~MainWindow() { delete ui; }
運(yùn)行代碼后,程序會(huì)從數(shù)據(jù)庫(kù)內(nèi)取出結(jié)果并輸出到TreeView組件上:
原文鏈接:https://www.cnblogs.com/LyShark/p/15654747.html
相關(guān)推薦
- 2022-10-24 利用Pandas求兩個(gè)dataframe差集的過(guò)程詳解_python
- 2022-05-21 Python集合set()使用的方法詳解_python
- 2022-07-10 DHCP服務(wù)配置——CentOS/Windows2003
- 2022-04-20 Xamarin渲染器移植到.NET?MAUI項(xiàng)目中_實(shí)用技巧
- 2022-05-13 深度優(yōu)先搜索之八皇后問(wèn)題
- 2022-06-06 webpack4.0-解決webpack 報(bào)The 'mode' option has not be
- 2023-01-05 Python?range函數(shù)之生成器函數(shù)的示例_python
- 2022-02-22 el-step中多個(gè)步驟中的表單一起提交
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支