• 【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);
      
      • 1
    2. 设置表格的行数和列数:

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

      int timerId = tableWidget->startTimer(1000);  // 每隔1秒触发一次定时器事件
      
      // 定时器事件处理函数
      void MyTableWidget::timerEvent(QTimerEvent *event) {
          if (event->timerId() == timerId) {
              // 定时事件处理代码
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    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);
                  }
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

    示例

    下述示例展示了如何使用QTableWidget和定时器来定时刷新表格中的数据:

    #include 
    #include 
    #include 
    #include 
    
    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();
    }
    
    • 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
    • 36
    • 37
    • 38
    • 39

    解释

    以上代码演示了使用QTableWidget和定时器定时刷新表格数据的基本流程。
    通过创建自定义的表格控件类,并重写timerEvent函数来处理定时器事件,可以在事件处理函数中实现表格数据的刷新操作。
    在示例中,定时器每隔1秒触发一次,表格中的数据会被更新为"Data_%1"。

    结论

    QTableWidget是Qt中用于展示和编辑二维表格数据的控件类,可以与定时器一起使用来定时刷新表格数据或执行其他与表格相关的操作。
    通过设置定时器、连接定时器事件处理函数,并在事件处理函数中更新表格数据,可以实现动态、定时更新的表格显示效果。
    QTableWidget适用于需要实时展示数据变化的场景,例如监控系统中的数据显示、实时数据分析等。简单易用,并且提供了丰富的接口和功能,可以满足各种表格展示需求。

  • 相关阅读:
    想要精通算法和SQL的成长之路 - 最长回文子串
    golang保留小数点后两位,不四舍五入
    神经网络输出中间特征图
    充电桩高压安全测量方案
    Django中djangorestframework-simplejwt的使用
    shell脚本之find命令
    Spring篇---第五篇
    【c++刷题Day2】专题3栈与队列&单调栈与单调队列
    【力扣每日一题】2023.9.10 打家劫舍Ⅳ
    Docker搭建nginx
  • 原文地址:https://blog.csdn.net/MrHHHHHH/article/details/133756313