Qt 学习之路 :可视化显示数据库数据

前面我们用了两个章节介绍了 Qt 提供的两种操作数据库的方法。显然,使用QSqlQuery的方式更灵活,功能更强大,而使用QSqlTableModel则更简单,更方便与 model/view 结合使用(数据库应用很大一部分就是以表格形式显示出来,这正是 model/view 的强项)。本章我们简单介绍使用QSqlTableModel显示数据的方法。当然,我们也可以选择使用QSqlQuery获取数据,然后交给 view 显示,而这需要自己给 model 提供数据。鉴于我们前面已经详细介绍过如何使用自定义 model 以及如何使用QTableWidget,所以我们这里不再详细说明这一方法。

我们还是使用前面一直在用的 student 表,直接来看代码:

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

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

if (connect("demo.db")) {

QSqlTableModel *model = new QSqlTableModel;

model->setTable("student");

model->setSort(1, Qt::AscendingOrder);

model->setHeaderData(1, Qt::Horizontal, "Name");

model->setHeaderData(2, Qt::Horizontal, "Age");

model->select();

QTableView *view = new QTableView;

view->setModel(model);

view->setSelectionMode(QAbstractItemView::SingleSelection);

view->setSelectionBehavior(QAbstractItemView::SelectRows);

//        view->setColumnHidden(0, true);

view->resizeColumnsToContents();

view->setEditTriggers(QAbstractItemView::NoEditTriggers);

QHeaderView *header = view->horizontalHeader();

header->setStretchLastSection(true);

view->show();

} else {

return 1;

}

return a.exec();

}

这里的connect()函数还是我们前面使用过的,我们主要关注剩下的代码。

正如前一章的代码所示,我们在main()函数中创建了QSqlTableModel对象,使用 student 表。student 表有三列:id,name 和 age,我们选择按照 name 排序,使用setSort()函数达到这一目的。然后我们设置每一列的列头。这里我们只使用了后两列,第一列没有设置,所以依旧显示为列名 id。

在设置好 model 之后,我们又创建了QTableView对象作为视图。注意这里的设置:单行选择,按行选择。resizeColumnsToContents()说明每列宽度适配其内容;setEditTriggers()则禁用编辑功能。最后,我们设置最后一列要充满整个窗口。我们的代码中有一行注释,设置第一列不显示。由于我们使用了QSqlTableModel方式,不能按列查看,所以我们在视图级别上面做文章:将不想显示的列隐藏掉。

接下来运行代码即可看到效果:

如果看到代码中很多“魔术数字”,更好的方法是,使用一个枚举将这些魔术数字隐藏掉,这也是一种推荐的方式:

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

enum ColumnIndex

{

Column_ID = 0,

Column_Name = 1,

Column_Age = 2

};

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

if (connect("demo.db")) {

QSqlTableModel *model = new QSqlTableModel;

model->setTable("student");

model->setSort(Column_Name, Qt::AscendingOrder);

model->setHeaderData(Column_Name, Qt::Horizontal, "Name");

model->setHeaderData(Column_Age, Qt::Horizontal, "Age");

model->select();

QTableView *view = new QTableView;

view->setModel(model);

view->setSelectionMode(QAbstractItemView::SingleSelection);

view->setSelectionBehavior(QAbstractItemView::SelectRows);

view->setColumnHidden(Column_ID, true);

view->resizeColumnsToContents();

view->setEditTriggers(QAbstractItemView::NoEditTriggers);

QHeaderView *header = view->horizontalHeader();

header->setStretchLastSection(true);

view->show();

} else {

return 1;

}

return a.exec();

}

时间: 2024-08-29 20:23:07

Qt 学习之路 :可视化显示数据库数据的相关文章

Qt学习之路(54): 自定义拖放数据对象

前面的例子都是使用的系统提供的拖放对象 QMimeData 进行拖放数据的存储,比如使用 QMimeData::setText() 创建文本,使用 QMimeData::urls() 创建 URL 对象.但是,如果你希望使用一些自定义的对象作为拖放数据,比如自定义类等等,单纯使用 QMimeData 可能就没有那么容易了.为了实现这种操作,我们可以从下面三种实现方式中选择一个: 将自定义数据作为 QByteArray 对象,使用 QMimeData::setData() 函数作为二进制数据存储到

Qt 学习之路 2 --- 读书笔记

一.文章来由 来自豆子老师非常好的一本Qt教程,但是只有网络版,所以用这个做笔记了,不动笔墨不读书嘛~~ 二.读书笔记 1.Qt 学习之路 2(2):Qt 简介 1.1 关于 Qt 的一站式解决 Qt 是一个著名的 C++ 应用程序框架.但并不只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个"一站式"的解决方案:不再需要研究 STL,不再需要 C++ 的,不再需要到处去找解析 XML.连接数据库.访问网络的各种第三方库,因为

Qt学习之路

  Qt学习之路_14(简易音乐播放器) Qt学习之路_13(简易俄罗斯方块) Qt学习之路_12(简易数据管理系统) Qt学习之路_11(简易多文档编辑器) Qt学习之路_10(Qt中statusBar,MessageBox和Timer的简单处理) Qt学习之路_9(Qt中Item Widget初步探索) Qt学习之路_8(Qt中与文件目录相关操作) Qt学习之路_7(线性布局和网格布局初步探索) Qt学习之路_6(Qt局域网聊天软件) Qt学习之路_5(Qt TCP的初步使用) Qt学习之路

QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据

QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接: http://qt-project.org/wiki/How_to_use_a_QSqlQueryModel_in_QML 环境: 主机:WIN7 开发环境:Qt5.2.1 说明: 在QML中不能直接对数据库进行操作,所以将QSqlQueryModel封装成子类,作为属性给QML使用 效果图: 源代码: qml文

C#在listview控件中显示数据库数据

一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 设置一列的Text属性,这就是列名 添加三列 3.编辑items属性,添加一行数据 编辑Text属性,添加一行的第一个数据 编辑subitems属性,添加一行中的其他数据 添加两个数据 填写结果 二.在listview中显示数据库数据 //在listview中显示数据库数据 private voi

QT学习之路(1):彩票绝对不中模拟器

//============================================//绝对不中,彩票开奖模拟器#include "mainwindow.h"#include "ui_mainwindow.h"#include <QHash>#include <QDebug>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::M

QT学习之路--创建一个对话框

Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included from

JQuery EasyUI 学习——Struts2与EasyUI DataGrid数据表格结合使用显示数据库数据

因为EasyUI DataGrid只要取出后台传过来的一定格式的JSON数据,就可以在前台页面数据表格中,以一定形式显示数据库中的数据.此处,我们使用Struts2框架整合DataGrid,实现数据的显示. 一.页面内容 为了在页面中显示数据库中字段内容,需要定义一个table,通过EasyUI内部设计,自动显示数据,如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF

Qt学习之路【1】:QT显示中文问题

最近,公司项目的GUI界面使用的是Qt,研究了近两个月的Qt发现中文显示确实是一个问题,这个问题中主要存在两方面的问题: [1]中文显示: [2]中文乱码: 其中[1]问题出现的情景是:Qt的界面只有英文字母,中文一个都不显示,也不会出现乱码:[2]问题出现的情景是:Qt界面本来显示汉字的地方全部被乱码所代替. [1]问题产生的原因是:Qt字库中没有相应的字体,提供给Qt的界面 [2]问题产生的原因是:中文编码转换的问题. 字节顺序标记(BOM) 出现在字节流的开头,在windows下保存UTF