【Qt控件之QTableWidget】使用及技巧
简介
QTableWidget是Qt中的表格控件,用于显示和编辑二维表格数据,QTableView类的子类。
可以和定时器结合,实现定时刷新表格中的数据或执行其他与表格相关的操作。
主要函数说明
-
定时器相关函数(用于刷新表格数据):
void startTimer(int interval):启动定时器,设置刷新时间间隔为interval毫秒。void timerEvent(QTimerEvent *event):定时器事件处理函数,可以重写这个函数来实现定时刷新等操作。void killTimer(int id):停止指定ID的定时器。
-
构造函数:
QTableWidget(int rows, int columns, QWidget *parent = nullptr):创建指定行数rows和列数columns的表格控件。
-
行列操作函数:
int rowCount() const:返回表格的行数。int columnCount() const:返回表格的列数。void setRowCount(int rows):设置表格的行数。void setColumnCount(int columns):设置表格的列数。
-
单元格操作函数:
QTableWidgetItem *item(int row, int column) const:获取指定单元格的表格项。void setItem(int row, int column, QTableWidgetItem *item):设置指定单元格的表格项。QTableWidgetItem *takeItem(int row, int column):移除并返回指定单元格的表格项。
-
表格项选择和编辑:
QItemSelectionModel *selectionModel() const:返回表格的选择模型,用于管理表格项的选择状态。void setSelectionMode(QAbstractItemView::SelectionMode mode):设置表格的选择模式。void editItem(QTableWidgetItem *item):编辑指定表格项。
-
表格项格式设置:
void setItemDelegate(QAbstractItemDelegate *delegate):设置表格项的委托,用于定制表格项的显示方式。void setItem(int row, int column, QTableWidgetItem *item):设置指定单元格的表格项。void setHorizontalHeaderLabels(const QStringList &labels):设置水平表头标签。void setVerticalHeaderLabels(const QStringList &labels):设置垂直表头标签。
-
多行多列处理:
void setSpan(int row, int column, int rowSpan, int columnSpan):设置指定单元格的行列合并范围。void mergeCells(const QModelIndex &index):合并指定单元格所在的行或列。
-
表格数据导入导出:
void clearContents():清除表格的内容,保留行和列。void clear():清除表格的内容,并删除所有行和列。
以上是QTableWidget类的一部分函数,还有许多其他用于设置样式、排序、滚动等的函数。通过使用这些函数,可以方便地对表格进行创建、编辑、格式设置和数据操作。
需要注意的是,QTableWidget是基于Model/View架构的,它的数据存储在QTableWidgetItem中。如果需要更高级的功能,可以考虑使用QTableView及相关的模型类,如QStandardItemModel和QAbstractTableModel。
用法及使用技巧
-
创建表格控件对象:
QTableWidget *tableWidget = new QTableWidget(parent); -
设置表格的行数和列数:
tableWidget->setRowCount(4); // 设置表格的行数为4 tableWidget->setColumnCount(3); // 设置表格的列数为3 -
设置定时器并连接定时器事件处理函数:
int timerId = tableWidget->startTimer(1000); // 每隔1秒触发一次定时器事件// 定时器事件处理函数 void MyTableWidget::timerEvent(QTimerEvent *event) {if (event->timerId() == timerId) {// 定时事件处理代码} } -
在定时器事件处理函数中刷新表格数据:
void MyTableWidget::timerEvent(QTimerEvent *event) {if (event->timerId() == timerId) {// 定时事件处理代码// 刷新表格中的数据for (int row = 0; row < rowCount(); ++row) {for (int column = 0; column < columnCount(); ++column) {QTableWidgetItem *item = new QTableWidgetItem("Data");setItem(row, column, item);}}} }
示例
下述示例展示了如何使用QTableWidget和定时器来定时刷新表格中的数据:
#include <QApplication>
#include <QDebug>
#include <QTableWidget>
#include <QTableWidgetItem>class MyTableWidget : public QTableWidget {
public:MyTableWidget(QWidget *parent = nullptr) : QTableWidget(parent) {setRowCount(4);setColumnCount(3);timerId = startTimer(1000); // 每隔1秒触发一次定时器事件}protected:void timerEvent(QTimerEvent *event) override {if (event->timerId() == timerId) {// 定时事件处理代码// 刷新表格中的数据for (int row = 0; row < rowCount(); ++row) {for (int column = 0; column < columnCount(); ++column) {QTableWidgetItem *item = new QTableWidgetItem(QString("Data_%1").arg(row+column));setItem(row, column, item);}}}}private:int timerId;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyTableWidget tableWidget;tableWidget.show();return app.exec();
}
解释
以上代码演示了使用QTableWidget和定时器定时刷新表格数据的基本流程。
通过创建自定义的表格控件类,并重写timerEvent函数来处理定时器事件,可以在事件处理函数中实现表格数据的刷新操作。
在示例中,定时器每隔1秒触发一次,表格中的数据会被更新为"Data_%1"。
结论
QTableWidget是Qt中用于展示和编辑二维表格数据的控件类,可以与定时器一起使用来定时刷新表格数据或执行其他与表格相关的操作。
通过设置定时器、连接定时器事件处理函数,并在事件处理函数中更新表格数据,可以实现动态、定时更新的表格显示效果。
QTableWidget适用于需要实时展示数据变化的场景,例如监控系统中的数据显示、实时数据分析等。简单易用,并且提供了丰富的接口和功能,可以满足各种表格展示需求。
相关文章:
【Qt控件之QTableWidget】使用及技巧
简介 QTableWidget是Qt中的表格控件,用于显示和编辑二维表格数据,QTableView类的子类。 可以和定时器结合,实现定时刷新表格中的数据或执行其他与表格相关的操作。 主要函数说明 定时器相关函数(用于刷新表格数据): void startT…...
算法-动态规划/中心扩散法-最长回文子串
算法-动态规划/中心扩散法-最长回文子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/longest-palindromic-substring 1.2 题目描述 2 动态规划 2.1 思路 dp[i][j] 表示[i,j]之间的字符串是否是回文。 那么,如果chars[i] chars[j]时,就…...
(6)SpringMVC中使用CharacterEncodingFilter编码过滤器处理请求和响应的乱码问题
处理SpringMVC中乱码问题 处理原生Servlet中请求和响应的乱码问题,参考文章 Servlet中的过滤器的实现及其原理,参考文章 配置CharacterEncodingFilter 在Servlet规范中要求request和response对象设置编码之前不能有获取请求参数和响应数据的操作,否则后续设置的编码都将不起…...
USB协议层数据格式
USB协议 1. 硬件拓扑结构2. 协议层2.1 字节/位传输顺序2.2 SYNC域2.3 包格式2.3.1 PID域2.3.2 令牌包(Token)2.3.3 数据包2.3.4 握手包 2.4 传输细节2.4.1 传输(Transfer)和事务(Transaction)2.4.2 过程(stage)和阶段(phase)2.4.3 批量传输2.4.4 中断传输2.4.5 实时传输2.4.6 控…...
加密的重要性,MySQL加密有哪些好处?
加密是一种将信息转化为无法直接读取的格式的技术,从而保护信息安全。在当今数字化的世界中,数据已成为企业的重要资产,因此加密的重要性不言而喻。在这篇文章中,我们将探讨MySQL加密的好处以及如何选择合适的加密算法。 MySQL加密…...
Python为Excel中每一个单元格计算其在多个文件中的平均值
本文介绍基于Python语言,对大量不同的Excel文件加以跨文件、逐单元格平均值计算的方法。 首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有如下所示的大量Excel文件,我们这里就以.csv文件为例来介绍。其中,每…...
LLM 系列之 Transformer 组件总结
本系列为LLM 学习博客,会一一记录各个模块解读。 以下内容参考:大语言模型综述 https://github.com/RUCAIBox/LLMSurvey 主流架构 大语言模型,主要的核心组件是Transformer。不同的模型选择的架构不一样,目前主流架构有: 编码器…...
计算机等级考试—信息安全三级真题十
目录 一、单选题 二、填空题 三、综合题 一、单选题...
面试总结(mysql定精度/oom排查/spring三级缓存/stream流)
Mysql数据类型上的一个把握 1、MySQL Decimal为什么不会丢失精度 DECIMAL的存储方式和其他数据类型都不同,它是以字符串形式存储的。假设一个字段为DECIMAL(3,0),当我们存入100时,实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值&…...
uniapp四个元素点击那个哪个变色,其他的还变原来的颜色
在UniApp中,可以使用CSS伪类选择器和动态样式绑定来实现点击某个元素时改变其颜色的效果。假设有四个元素分别为A、B、C和D。 首先,为这四个元素添加一个共同的类名,例如"item"。 然后,在页面的样式中定义两种颜色&am…...
Springcloud笔记(2)-Eureka服务注册
Eureka服务注册 服务注册,发现。 在Spring Cloud框架中,Eureka的核心作用是服务的注册和发现,并实现服务治理。 Eureka包含两个组件:Eureka Server和Eureka Client。 Eureka Server提供服务注册服务,各个节点启动后…...
国庆 day 5
QT实现TCP服务器客户端搭建的代码,现象 服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);server new QTcpServer(this);connect (server,&…...
计算机网络 | OSI 参考模型
计算机网络 | OSI 参考模型 计算机网络 | OSI 参考模型应用层表示层会话层传输层网络层数据链路层物理层 参考视频:王道计算机考研 计算机网络 参考书:《2022年计算机网络考研复习指导》 计算机网络 | OSI 参考模型 OSI 参考模型自下而上分为7层&…...
uniapp 实现地图头像上的水波纹效果
最近实现了uniapp 地图头像水波纹的效果,话不多说,先来看看视频效果吧:链接 在这里具体的代码就不放出来了,还是利用了uniapp的 uni.createAnimation 方法,因为cover-view 不支持一些css 的动画效果,所以这…...
Zabbix7.0 LTS新功能
一、简介 LTS是长期支持。LTS版本支持5年。如果更喜欢稳定性,未涉及到最新的功能,可以选次新的LTS或者更低解决方案。而Zabbix6.4是最新的主要版本不属于LTS版本。 二、新功能 从以下几个方面介绍部分新功能: 性能提升:内存储存…...
充电100%并非都是美事,有时少点更有溢出!如何正确为iPhone充电
iPhone是非凡的设备,但一旦电池耗尽,它们就会失去光泽。这就是为什么照看电池内部并确保始终正确充电很重要。 在这篇文章中,我们解释了如果你想让你的iPhone每天运行到深夜,并尽可能多地保持这种状态,你需要采取的步…...
【软件测试】JUnit详解
文章目录 一. Junit是什么?二.Junit中常见的注解1. Test2. BeforeAll & AfterAll3. BeforeEach & AfterEach4. ParameterizedTest参数化5. Disabled6. Order 三. 测试套件1. 通过class运行测试用例2. 通过包运行测试用例 四. 断言 一. Junit是什么? JUnit是一个用于…...
hive统计页面停留时间
1、背景:通过业务埋点数据,统计用户在页面的停留时间 样例数据,样例数据存入表tmp, 有如下字段用户uid、动作时间戳time、页面名称pn、动作名称action SELECT 12345 AS uid, 1695613731020 AS time, 搜索 AS pn, click AS acti…...
LeetCode 24.两两交换链表中的结点
题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 首先可以特判一下,如果结点数目小于等于1,则直接返回即可,因为数目小于等于1就不需要交换了。 然后我们可以创建一个虚拟的头结点,然…...
【每日一记】OSPF区域划分详讲、划分区域的优点好处
个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
