【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 🕊️系列专栏:🖼…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
