C/C++ Qt 数据库与TreeView组件绑定
2023-06-13 09:16:22 时间
在上一篇博文《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
组件上:
相关文章
- Qt控件-QListWidget
- C/C++ Qt 数据库与SqlTableModel组件应用
- C/C++ Qt 数据库QSql增删改查组件应用
- C/C++ Qt TabWidget 实现多窗体创建
- c++的链表-链表入门(C++)
- C/C++ Qt 编译打包项目
- C/C++ Qt ListWidget 增加右键菜单
- C/C++ Qt 数据库与ComBox多级联动
- C/C++ Qt 数据库与TableView多组件联动
- C/C++ Qt 数据库SqlRelationalTable关联表
- Qt官方示例-样式插件
- Qt自绘系列-加载等待控件
- Linux下Qt安装指南:快速部署Qt运行环境(linux下qt安装教程)
- Qt在Linux上的移植实践(qt移植到linux)
- 利用Qt快速调用Linux程序简易指南(qt调用linux程序)
- 使用Qt快速连接MySQL数据库(qt连接mysql)
- 数据库使用Qt连接Oracle数据库:一步一步实现(qt连接oracle)
- 解决Qt连接MySQL的问题(qt连接不上mysql)
- 使用QT操作MySQL数据库(qt的mysql数据库)
- 在Linux上开发应用程序:Qt系列版本深入解析(linux版本qt)
- Adept Qt to Access Linux Commands(qt调用linux命令)
- 快速使用QT进行MySQL数据库操作(qt使用mysql数据库)
- 如何在Qt应用程序中访问MySQL数据库?(qt访问mysql)
- 入门Linux下Qt编程,掌握技巧!(linux下qt编程入门)
- 编程使用Qt快速实现SQLServer数据库编程(qt中sqlserver)
- QT开发MSSQL数据库技术实现(qt mssql)
- Linux下Qt音频播放:轻松享受音乐乐活力(linux下qt音频播放)