01 数据库表格(QTableView 显示)**
本小节设计一个生活中的例子,使用数据库修改/查询员工的编号、姓名、年龄、性别与照片信息。
本例将数据库的内容显示到 QTableView 上。如果只是简单的显示数据库的内容到QTableView 上,可以使用下面的方法,此方法 QTableView 上可以看到员工的编号、姓名、年龄、性别信息,同时可以双击表格进行项修改,修改完成将自动保存到数据库里。
本例就讲解如何将数据库数据显示到 QTableView 上,及查看选择的员工项的全部信息。介绍 Qt 如何使用数据库存储照片的信息。我们知道数据库类型有个 BLOB 数据类型可以用于存储照片信息。但是本例并不那样做,当数据库数据很多时,将照片(二进制数据)存储到数据库里就不是一个
明智的选择了。大字段数据会加重数据库的负担,拖慢数据库,数据库文件越小访问肯定越快,数据库也不用遍历那么多内容,或者加载那么大的数据到内存里,造成响应不及时等。计算机可能处理速度很快,但是对于普通的单核和多核 ARM 开发板来说速度可能会跟不上啊!所以数据库最好是存储照片的路径。照片路径属于字符串文本,不会占用太多空间。
本例目的:用 QTableView 显示数据库表的数据,显示员工的信息。
工具:Qt 5.14.2 平台:windows
02 源码
头文件主要声明布局用的类和数据库,重要关注是 QSqlDatabase、QSqlQueryModel 、QdataWidgetMapper 和 QItemSelectionModel。这里声明的是全局变量。
## mainwindow.h
连接数据库,创建数据库表,插入数据,与上一小节实用闹钟基本一样,不再赘述。
| 基于Qt数据库项目实现(Sqlite3为例)|考查数据库、绘制(画家)、事件等知识点(进阶) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
重点关注这几行代码,QItemSelectionModel 将 sqlQueryModel
作为项的选择模型,然后,tableView 设置项的选择模型为 itemSelectionModel,这个目的就是使用 itemSelection 的行发生的变化的信号 currentRowChanged()。
这里主要是是将 sqlQueryModel 的数据通过 dataWidgetMapper 这个对象映射到我们的普通控件类上。比如映射第 4 个数据(index = 3)性别数据到 comboBox 上。可以看出 dataWidgetMapper 只是一个搬运工而已,将指定的数据搬到我们需要显示的控件上。
当我们点击表中的数据,行发生变化后,则这个槽函数触发,流程是从当
前选择的行里,使用 QSqlRecord 记录当前行的数据,然后从当前行的数据提取出 id 的编号,再使用 QSqlQuery 的 exec()方法执行 sql 的 select 语句获取出 photo 字段照片的路径数据,最后将获取的照片路径数据初始化一个 QImage 对象显示到 imageLable 上,这样就实现了数据显示的功能。并且映射到控件上的内容也发生了改变。
当我们的数据库表足够大时,我们若想使用一些按钮来点击切换查询当前项的数据可以使用按钮连接到 dataWidgetMapper 的 toFirst()、toLast()、toNext()和 toPrevious()槽函数。意思是跳转到第一行,最后一行,下一行和前一行。最后将 tableView 设置为 dataWidgetMapper 当前行就会触发 currentRowChanged(),就能实现按钮控制查询数据了。至于读者想加什么功能由读者自由设计,本例只是写了个大概框架。
## mainwindow.cpp
main.cpp 内容如下,没有修改。
03 程序运行效果
运行本例时,先点击构建,构建完成后将本项目下的整个 photos 文件夹拷贝到构建出来的C:\Users\ll\Desktop\QT Projects\2024\build-sqlite_alarm-Desktop_Qt_5_14_2_MinGW_64_bit-Debug 目录下。因为本程序会从数据库里读取出员工的照片路径信息,所以需要提前将照片文件夹放至可执行程序同一级目录下。点击表中的项,当切换员工的信息里,我们可以看到左下角被映射的内容发生了改变,变成了当前选择行的员工信息,右下角的照片头像也变成了该员工的照片信息。本例实现的就是从数据库里取数据并显示到 QTableView 及搭配其他控件使用的例子。
如果想看创建的数据库.db文件,可以使用这个工具,试用14天,足够了。
| www.navicat.com.cn/ |
|---|