广告
返回顶部
首页 > 资讯 > 数据库 >Qt数据库(6) - 在TableView中显示数据
  • 948
分享到

Qt数据库(6) - 在TableView中显示数据

Qt数据库(6)-在TableView中显示数据 2017-03-06 16:03:10 948人浏览 猪猪侠
摘要

Qt Version 5.14.0 QsqlQueryModel、QSqlTableModel、QSqlRelationalTableModel三个类可以用作Qt View相关显示类的数据源,比如QTableView、QListView和Q

Qt数据库(6) - 在TableView中显示数据

Qt Version 5.14.0

QsqlQueryModel、QSqlTableModel、QSqlRelationalTableModel三个类可以用作Qt View相关显示类的数据源,比如QTableView、QListView和QTreeView。其中最常用的应该是QTableView,因为SQL语句的结果数据集必然是一个二维数据结构

视图(Views)

视图的创建:新建一个视图,并给它设置一个数据源:

QTableView *view = new QTableView;
view->setModel(model);
iew->show();

设置视图不可编辑

view->setEditTriggers(QAbstractItemView::NoEditTriggers);

多个视图可以使用同一个数据模型(Model),当其中一个视图(View)中修改数据时,其它视图会立即刷新显示。

视图类在视图顶端显示标题栏(header),可以调用model的setHeaderData()函数来修改标题文本。以下代码将标题栏设为数据表的字段名称:

model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name"));
model->setHeaderData(0, Qt::Horizontal, QObject::tr("City"));
model->setHeaderData(0, Qt::Horizontal, QObject::tr("Country"));

QTableView也有纵向标题栏,一般用于显示行号。使用QSqlTableModel::insertRows()插入新行时,新行对应的纵向标题栏显示“*”,直到修改被写入数据库,才会显示新行的行号。

同样的,当你调用removeRows()删除行时,修改被提交之前,标题栏对应行会显示“!”。

视图中的单元格显示的数据用委托(delegate)来完成渲染。默认的委托类是QItemDelegate,它能完成基本数据类型的渲染,如QString、int、QImage等等。当用户编辑视图中的某一项时,委托也负责提供编辑控件(editor widgets),比如一个comboBox。你可以通过继承QItemDelegate或QAbstractItemDelegate来实现自己的委托类。更多信息,详见Qt助手关键字Model/View Programming。

QSqlTableModel只能操作一个数据表,如果你需要一个可读写的模型,用它来操作任意结果数据集,那你可以继承QSqlQueryModle类,并重新实现flags()和setData()函数。以下函数使得query model的第一和第二个字段可读写:

 Qt::ItemFlags EditableSqlModel::flags(const QModelIndex &index) const
 {
 	Qt::ItemFlags flags = QSqlQueryModel::flags(index);
 	if (index.column() == 1 || index.column() == 2)
 	flags |= Qt::ItemIsEditable;
 	return flags;
 }

 bool EditableSqlModel::setData(const QModelIndex &index, const QVariant &value, int )
 {
 	if (index.column() < 1 || index.column() > 2)
 		return false;
		
 	QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0);
 	int id = data(primaryKeyIndex).toInt();
 	clear();
 	bool ok;
 	if (index.column() == 1)
	{
 		ok = setFirstName(id, value.toString());
 	}
	else 
	{
 		ok = setLastName(id, value.toString());
 	}
 	refresh();
 	return ok;
 }

 bool EditableSqlModel::setFirstName(int personId, const QString &firstName)
 {
 	QSqlQuery query;
 	query.prepare("update person set firstname = ? where id = ?");
 	query.addBindValue(firstName);
 	query.addBindValue(personId);
 	return query.exec();
 }

一个自定义的模型还能实现许多功能,比如:设置背景颜色,设置编辑控件,提供toolTip,特别处理null值等等。

如果你想要外键显示成更人性化的字符串,可以使用QSqlRelationalTableModel类。而为了更好的显示效果,可以使用QSqlRelationalDelegate委托,它可以在你编辑外键值时提供下拉列表编辑控件。

详见Qt助手关键字:Relational Table Model。

您可能感兴趣的文档:

--结束END--

本文标题: Qt数据库(6) - 在TableView中显示数据

本文链接: https://www.lsjlt.com/news/4021.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt数据库(6) - 在TableView中显示数据
    Qt Version 5.14.0 QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel三个类可以用作Qt View相关显示类的数据源,比如QTableView、QListView和Q...
    99+
    2017-03-06
    Qt数据库(6) - 在TableView中显示数据
  • C/C++ Qt 数据库与TableView实现多组件联动
    Qt 数据库组件与TableView组件实现联动,以下案例中实现了,当用户点击并选中TableView组件内的某一行时,我们通过该行中的name字段查询并将查询结果关联到ListVi...
    99+
    2022-11-12
  • C# 中操作Access数据库显示数据
     C# 中操作Access数据库显示数据        我们将会在上一篇文章的基础上来介绍如何使用数据库  ...
    99+
    2022-10-18
  • PHP中怎么获取显示数据库数据
    这篇文章将为大家详细讲解有关PHP中怎么获取显示数据库数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP获取显示数据库数据函数之 mysql_result()mixed mysql_r...
    99+
    2023-06-17
  • C/C++Qt数据库与Chart历史数据展示
    在前面的博文中具体介绍了QChart组件是如何绘制各种通用的二维图形的,本章内容将继续延申一个新的知识点,通过数据库存储某一段时间节点数据的走向,当用户通过编辑框提交查询记录时,程序...
    99+
    2022-11-12
  • JavaWeb实现显示mysql数据库数据
    目录EMS-员工信息管理系统创建ems库创建user表插入表格数据创建UserListServlets使用JDBC连接数据库部署服务器EMS-员工信息管理系统 MySQL学习之基础操...
    99+
    2022-11-13
  • java怎么显示数据库的数据
    要显示数据库的数据,首先需要连接到数据库,并执行查询操作。以下是一个简单的示例代码来显示数据库的数据:```javaimport j...
    99+
    2023-08-15
    java 数据库
  • C/C++中Qt数据库与Chart历史数据展示的示例分析
    这篇文章主要为大家展示了“C/C++中Qt数据库与Chart历史数据展示的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/C++中Qt数据库与Chart历史数据展示的示例分析”这篇文章...
    99+
    2023-06-25
  • 在Qt中怎么操作MySQL数据库
    本篇内容介绍了“在Qt中怎么操作MySQL数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、安装驱动(1)安装在Qt中操作MySQL数...
    99+
    2023-07-05
  • C/C++ Qt数据库与TableView实现多组件联动的方法是什么
    这篇文章主要讲解了“C/C++ Qt数据库与TableView实现多组件联动的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C/C++ Qt数据库与TableV...
    99+
    2023-06-21
  • nodejs进阶(6)—连接MySQL数据库示例
    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE ...
    99+
    2022-06-04
    进阶 示例 数据库
  • php数据库显示数据中文乱码怎么解决
    PHP是一种流行的服务器端脚本语言,非常适合用于处理Web应用程序。在PHP应用程序中,经常需要从数据库中检索并显示数据。但是,当PHP尝试从数据库中检索中文时,可能会碰到所谓的“乱码”问题。本文将介绍如何解决PHP在显示数据库数据中文乱码...
    99+
    2023-05-14
    php
  • php数据库显示数据中文乱码如何解决
    今天小编给大家分享一下php数据库显示数据中文乱码如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。确定数据库编码方式首...
    99+
    2023-07-05
  • Qt创建SQlite数据库的示例代码
    Qt 创建 SQlite数据库 void Widget::initDB() { // 创建并打开数据库 QSqlDatabase database; data...
    99+
    2022-11-13
  • Qt如何实现边加载数据边显示页面
    这篇“Qt如何实现边加载数据边显示页面”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt如何实现边加载数据边显示页面”文章吧...
    99+
    2023-06-28
  • 如何在php页面显示数据库内容
    要在PHP页面上显示数据库内容,您需要使用数据库连接,执行查询并将结果显示在页面上。以下是一个基本的示例,显示数据库中的内容:```...
    99+
    2023-09-04
    php 数据库
  • Qt数据库中如何实现通用数据库请求
    小编给大家分享一下Qt数据库中如何实现通用数据库请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言数据库请求是在数据库采集的基础上,换成http请求的形式...
    99+
    2023-06-29
  • MySQL数据库怎么正常插入并显示中文数据
    本篇内容主要讲解“MySQL数据库怎么正常插入并显示中文数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库怎么正常插入并显示中文数据”吧!  一...
    99+
    2022-10-18
  • Qt实现边加载数据边显示页面的示例代码
    目录1.定义显示定时器1:定义定时器2:定时器调用3:定时器加载数据2.线程加载数据3.实时呈现加载进度做过C++开发的人们都知道,无论是MFC框架还是QT框架,实现加载数据的等待效...
    99+
    2022-11-13
  • vb中怎么显示查询的数据库
    在VB中显示查询的数据库,可以使用ADO.NET技术来连接数据库并执行查询操作。以下是一个简单的示例:1. 首先,添加一个ADODB...
    99+
    2023-10-18
    vb 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作