当前位置: 首页 > news >正文

【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及相关的模型类,如QStandardItemModelQAbstractTableModel

用法及使用技巧

  1. 创建表格控件对象:

    QTableWidget *tableWidget = new QTableWidget(parent);
    
  2. 设置表格的行数和列数:

    tableWidget->setRowCount(4);     // 设置表格的行数为4
    tableWidget->setColumnCount(3);  // 设置表格的列数为3
    
  3. 设置定时器并连接定时器事件处理函数:

    int timerId = tableWidget->startTimer(1000);  // 每隔1秒触发一次定时器事件// 定时器事件处理函数
    void MyTableWidget::timerEvent(QTimerEvent *event) {if (event->timerId() == timerId) {// 定时事件处理代码}
    }
    
  4. 在定时器事件处理函数中刷新表格数据:

    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中的表格控件&#xff0c;用于显示和编辑二维表格数据&#xff0c;QTableView类的子类。 可以和定时器结合&#xff0c;实现定时刷新表格中的数据或执行其他与表格相关的操作。 主要函数说明 定时器相关函数(用于刷新表格数据)&#xff1a; void startT…...

算法-动态规划/中心扩散法-最长回文子串

算法-动态规划/中心扩散法-最长回文子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/longest-palindromic-substring 1.2 题目描述 2 动态规划 2.1 思路 dp[i][j] 表示[i,j]之间的字符串是否是回文。 那么&#xff0c;如果chars[i] chars[j]时&#xff0c;就…...

(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加密有哪些好处?

加密是一种将信息转化为无法直接读取的格式的技术&#xff0c;从而保护信息安全。在当今数字化的世界中&#xff0c;数据已成为企业的重要资产&#xff0c;因此加密的重要性不言而喻。在这篇文章中&#xff0c;我们将探讨MySQL加密的好处以及如何选择合适的加密算法。 MySQL加密…...

Python为Excel中每一个单元格计算其在多个文件中的平均值

本文介绍基于Python语言&#xff0c;对大量不同的Excel文件加以跨文件、逐单元格平均值计算的方法。 首先&#xff0c;我们来明确一下本文的具体需求。现有一个文件夹&#xff0c;其中有如下所示的大量Excel文件&#xff0c;我们这里就以.csv文件为例来介绍。其中&#xff0c;每…...

LLM 系列之 Transformer 组件总结

本系列为LLM 学习博客&#xff0c;会一一记录各个模块解读。 以下内容参考:大语言模型综述 https://github.com/RUCAIBox/LLMSurvey 主流架构 大语言模型&#xff0c;主要的核心组件是Transformer。不同的模型选择的架构不一样&#xff0c;目前主流架构有&#xff1a; 编码器…...

计算机等级考试—信息安全三级真题十

目录 一、单选题 二、填空题 三、综合题 一、单选题...

面试总结(mysql定精度/oom排查/spring三级缓存/stream流)

Mysql数据类型上的一个把握 1、MySQL Decimal为什么不会丢失精度 DECIMAL的存储方式和其他数据类型都不同&#xff0c;它是以字符串形式存储的。假设一个字段为DECIMAL(3,0)&#xff0c;当我们存入100时&#xff0c;实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值&…...

uniapp四个元素点击那个哪个变色,其他的还变原来的颜色

在UniApp中&#xff0c;可以使用CSS伪类选择器和动态样式绑定来实现点击某个元素时改变其颜色的效果。假设有四个元素分别为A、B、C和D。 首先&#xff0c;为这四个元素添加一个共同的类名&#xff0c;例如"item"。 然后&#xff0c;在页面的样式中定义两种颜色&am…...

Springcloud笔记(2)-Eureka服务注册

Eureka服务注册 服务注册&#xff0c;发现。 在Spring Cloud框架中&#xff0c;Eureka的核心作用是服务的注册和发现&#xff0c;并实现服务治理。 Eureka包含两个组件&#xff1a;Eureka Server和Eureka Client。 Eureka Server提供服务注册服务&#xff0c;各个节点启动后…...

国庆 day 5

QT实现TCP服务器客户端搭建的代码&#xff0c;现象 服务器 #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 参考模型应用层表示层会话层传输层网络层数据链路层物理层 参考视频&#xff1a;王道计算机考研 计算机网络 参考书&#xff1a;《2022年计算机网络考研复习指导》 计算机网络 | OSI 参考模型 OSI 参考模型自下而上分为7层&…...

uniapp 实现地图头像上的水波纹效果

最近实现了uniapp 地图头像水波纹的效果&#xff0c;话不多说&#xff0c;先来看看视频效果吧&#xff1a;链接 在这里具体的代码就不放出来了&#xff0c;还是利用了uniapp的 uni.createAnimation 方法&#xff0c;因为cover-view 不支持一些css 的动画效果&#xff0c;所以这…...

Zabbix7.0 LTS新功能

一、简介 LTS是长期支持。LTS版本支持5年。如果更喜欢稳定性&#xff0c;未涉及到最新的功能&#xff0c;可以选次新的LTS或者更低解决方案。而Zabbix6.4是最新的主要版本不属于LTS版本。 二、新功能 从以下几个方面介绍部分新功能&#xff1a; 性能提升&#xff1a;内存储存…...

充电100%并非都是美事,有时少点更有溢出!如何正确为iPhone充电

iPhone是非凡的设备&#xff0c;但一旦电池耗尽&#xff0c;它们就会失去光泽。这就是为什么照看电池内部并确保始终正确充电很重要。 在这篇文章中&#xff0c;我们解释了如果你想让你的iPhone每天运行到深夜&#xff0c;并尽可能多地保持这种状态&#xff0c;你需要采取的步…...

【软件测试】JUnit详解

文章目录 一. Junit是什么?二.Junit中常见的注解1. Test2. BeforeAll & AfterAll3. BeforeEach & AfterEach4. ParameterizedTest参数化5. Disabled6. Order 三. 测试套件1. 通过class运行测试用例2. 通过包运行测试用例 四. 断言 一. Junit是什么? JUnit是一个用于…...

hive统计页面停留时间

1、背景&#xff1a;通过业务埋点数据&#xff0c;统计用户在页面的停留时间 样例数据&#xff0c;样例数据存入表tmp&#xff0c; 有如下字段用户uid、动作时间戳time、页面名称pn、动作名称action SELECT 12345 AS uid, 1695613731020 AS time, 搜索 AS pn, click AS acti…...

LeetCode 24.两两交换链表中的结点

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 首先可以特判一下&#xff0c;如果结点数目小于等于1&#xff0c;则直接返回即可&#xff0c;因为数目小于等于1就不需要交换了。 然后我们可以创建一个虚拟的头结点&#xff0c;然…...

【每日一记】OSPF区域划分详讲、划分区域的优点好处

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;喜欢编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…...

复旦管院启动科创战略,培养科技研发人才,引领未来发展!

今年夏天&#xff0c;600多位优秀的企业家成为复旦大学EMBA 2023级新生。在疫情结束后&#xff0c;他们选择百战归来再读书&#xff0c;重新回到久违的课堂&#xff0c;共同探索科创大时代下企业的商业本质&#xff0c;开启新的学习与人生旅程。复旦大学管理学院院长陆雄文教授…...

Infinity同步

...

C语言:转义字符

目录 话不多说&#xff0c;先上表 \n \? \ \" \\ \t \a \ddd 附一张ASCII表 \xdd 练习 话不多说&#xff0c;先上表 一一举例解释下哈 \n 读取到结尾标识符\0 printf("demo\n\0Zh"); // demo \? 在书写连续多个问号时使用&#xff0c;防止…...

为什么 0.1 + 0.1 !== 0.2

为什么 0.1 0.1 ! 0.2 总结了几个很有意思的基础题目&#xff0c;分享一下。 为什么 0.1 0.1 ! 0.2 看到这个问题&#xff0c;不得不想到计算机中的数据类型&#xff0c;其中浮点数表示有限的精度。那么它就无法精确的表示所有的十进制小数&#xff0c;所以在在某些情况下…...

超详细!主流大语言模型的技术原理细节汇总!

1.比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。 2. 大语言模型的分布式训练技术&#xff1a;数据并行、张量模型并行、流水线并行、3D 并行、零冗余优化器 ZeRO、CPU 卸载技术 ZeRo-offload、混合精度训…...

本人4年测试经验,211 本科计算机专业,由于互联网裁员,然后谈谈我最近测试面试的总结

本人4年测试经验&#xff0c;211 本科计算机专业&#xff0c;由于互联网裁员&#xff0c;最近在 bosss 上投了些简历&#xff0c;测试开发岗&#xff0c;看看目前市场情况。 虽然都在说大环境不好&#xff0c;失业的人很多&#xff0c;我最近约面试的还是比较多的&#xff0c;…...

Android中级——Activity数据恢复过程

Activity数据恢复 onSaveInstanceState()onRestoreInstanceState()扩展 onSaveInstanceState() 在Activity调用onStop()之前调用会onSaveInstanceState()&#xff0c;如下 final void performStopActivity(IBinder token, boolean saveState, String reason) {ActivityClient…...

国内就能使用的chatgpt网页版,包含AIGC应用工具

Chatgpt的出现在多个领域带来了重要的影响。它能够显著提高我们的工作效率&#xff0c;无论是编写文案代码还是回答常见问题&#xff0c;都能在短时间内完成任务。通过Chatgpt&#xff0c;我们能够迅速获取所需答案。随着人工智能技术的不断发展&#xff0c;相信在未来AI能够带…...

Fast DDS之RTPS

目录 RTPS的使用 RTPS层实现了RTPS标准。DDS层概念映射关系如下&#xff1a; DDS LayerRTPS LayerDomainRTPSDomainDomainParticipantRTPSParticipantDataWriterRTPSWriterDataReaderRTPSReader RTPS的使用...

【算法|动态规划No.16】leetcode931. 下降路径最小和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...