1、QTableWidget的基本设置

ui->tableWidget->setColumnCount(11);
ui->tableWidget->setRowCount(NumOfReg);
/* 设置 tableWidget */
ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "Id" << "Name" << "Unit" << "Value" << "Min" << "Max"  << "Type" << "Mode" << "Enable" << "Last read" << "Last write");
ui->tableWidget->verticalHeader()->setVisible(false); // 隐藏水平header
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);   // 单个选中
ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  // 可以选中多个 

效果图:

2、设置QTableWidget的某些字段不可编辑和背景颜色

设置tableWidget下某些字段可以编辑,某些字段不可以编辑的方法:

void QTableWidget::setItem(int row, int column, QTableWidgetItem * item)

Sets the item for the given row and column to item.


来看一下Qt::ItemFlags有哪些类型:

看到上面的几个函数,就知道了可以通过设置item,然后设置单元格的属性。

每个单元格都要拥有一个自己的item,不能共用。

设置QTableWidget的背景颜色:
可以设置 QTableWidgetItem 的颜色:

当然这里你也可以使用下面这个函数,但这在Qt5.4的文档里是不建议使用(deprecated)的:

/* 设置 Id Name 字段的值不能修改 */
/* 设置不可修改的Id Name两列的背景颜色为灰色 */
for(int i = 0; i < NumOfReg; i++) {QTableWidgetItem *item = new QTableWidgetItem();item->setBackground(QBrush(QColor(Qt::lightGray)));item->setFlags(item->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 0, item);
}
for(int i = 0; i < NumOfReg; i++) {QTableWidgetItem *item = new QTableWidgetItem();item->setBackground(QBrush(QColor(Qt::lightGray)));item->setFlags(item->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 1, item);
}

效果图:

3、QTableWidget单元格的插入

下面的代码中,regInfo是指针数组,创建了5个RegisterInfo类的对象,并填充了默认字段。然后把这些字段值插入到相应的单元格中。

regInfo[0] = new RegisterInfo(0x00, QString("Target motor"), 255, 0, QString("U8"), QString("RW"), false);
regInfo[1] = new RegisterInfo(0x01, QString("Flags"), U32_MAX, 0, QString("U32"), QString("R"), false);
regInfo[2] = new RegisterInfo(0x02, QString("Status"), U8_MAX, 0, QString("U8"), QString("R"), false);
regInfo[3] = new RegisterInfo(0x03, QString("Control mode"), U8_MAX, 0, QString("U8"), QString("RW"), false);
regInfo[4] = new RegisterInfo(0x04, QString("Speed reference"), 4000, -4000, QString("S32"), QString("R"), false);for(int i = 0; i < ui->tableWidget->rowCount(); i++) {ui->tableWidget->item(i, 0)->setText(QString::number(regInfo[i]->getId(), 10));ui->tableWidget->item(i, 1)->setText(regInfo[i]->getName());
}
for(int i = 0; i < ui->tableWidget->rowCount(); i++) {QTableWidgetItem *item_max = new QTableWidgetItem();item_max->setText(QString::number(regInfo[i]->getMax()));item_max->setBackground(QBrush(QColor(Qt::lightGray)));item_max->setFlags(item_max->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 5, item_max);QTableWidgetItem *item_min = new QTableWidgetItem();item_min->setText(QString::number(regInfo[i]->getMin()));item_min->setBackground(QBrush(QColor(Qt::lightGray)));item_min->setFlags(item_min->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 4, item_min);QTableWidgetItem *item_type = new QTableWidgetItem();item_type->setText(regInfo[i]->getType());item_type->setBackground(QBrush(QColor(Qt::lightGray)));item_type->setFlags(item_type->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 6, item_type);QTableWidgetItem *item_mode = new QTableWidgetItem();item_mode->setText(regInfo[i]->getMode());item_mode->setBackground(QBrush(QColor(Qt::lightGray)));item_mode->setFlags(item_mode->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 7, item_mode);
}

效果图:

4、QTableWidget按字段值排序

下面实现点击每列的header,实现该列按字母顺序升序或将序排列。
horizontalHeader() 函数是QTableWidget从QTableView继承而来,它返回一个QHeaderView类型的指针。

而QHeaderView有一个 sectionClicked 这样一个signal:

理清了这样的关系后,就可以把这个 signal 和自己编写的排序的槽函数联系起来了:

connect(ui->tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(mySortByColumn(int)));
  • 1
  • 1

注意到QTableWidget有这样一个排序函数sortByColumn:

其中Qt::SortOrder是一个枚举类型,它有升序和降序两个值:

编写自己的槽函数 mySortByColumn:

void MainWindow::mySortByColumn(int column)
{static bool f = true;ui->tableWidget->sortByColumn(column, f ? Qt::AscendingOrder : Qt::DescendingOrder);f = !f;
}

这样就可以实现点击某列的header,使该列按升序(降序)排列,再点击一次,使该列按降序(升序)排列。
效果图:
Name字段按升序排列:

Max字段按将序排列:

5、在QTableWidget单元格中插入checkBox

for(int i = 0; i < ui->tableWidget->rowCount(); i++) {QTableWidgetItem *item_flag = new QTableWidgetItem();item_flag->setCheckState(regInfo[i]->getFlag() ? Qt::Checked : Qt::Unchecked);ui->tableWidget->setItem(i, 8, item_flag);
}

效果图:

Qt下QTableWidget的使用相关推荐

  1. Qt下QTableWidget 基本用法

    QTableWidget的基本设置 设置表头 ui->tableWidget->setColumnCount(11); ui->tableWidget->setRowCount ...

  2. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  3. Qt下一行代码就可以使用的稳定易用的日志log类

    Qt下一行代码就可以使用的稳定易用的日志类 此日志类是基于Qt 自带的 扩展的一个易用的日志类, 使用的是Qt自带的日志输出形式, 已长期运行在许多实际项目中,稳定可靠,而且跨平台, 在windows ...

  4. Qt下使用Shader绘制三角形

    在Qt下使用可编程管线编写OpenGL的流程是怎样的呢? 下面演示了Qt下使用可编程管线的基本代码:(绘制三个不同的三角形,并做些旋转变换) 在Qt中,我们从QGLWidget继承,来实现OpenGL ...

  5. Qt下的OpenGL 编程(3)绘制平面几何体

    一. 提要 之前的一篇教程已经搭建好了Qt下的OpenGL的编程环境,几天要来学习的就是OpenGL的2D绘图. 2D作为绘图的基础,还是很值得去好好学习,比如迪卡尔坐标,透视设置等等,而所谓的3D, ...

  6. Qt下使用OpenCV3打开摄像头并把图像显示到QLabel上

    前言 1.Qt5有自己摄像头的类QCamera,但是图像处理相关还是要使用OpenCV来做,这里我演示在Qt下使用OpenCV打开摄像头. 2.Qt的版本是5.9,Qt Creator 4.4.1,O ...

  7. Qt下Tcp传输文件

    Qt下Tcp传输文件 文章目录 Qt下Tcp传输文件 1.服务端 2.客户端 1.服务端 //ServerWidgets.h #ifndef SERVERWIDGET_H #define SERVER ...

  8. Qt下Undefined reference to 'vtable for xxx'

    QT下遇到这种错误提示时候需要注意以下情况: 一.cpp文件里使用了Q_OBJECT 分析:qmake不会处理.cpp文件里的Q_OBJECT,所以如果在.cpp文件中有它的话将会产生undefine ...

  9. Qt下继承于QObject创建的线程

    Qt线程 线程创建方法 示例 线程创建方法 Qt下创建线程的方法有两种: 一种是通过继承QThread,并重写run()函数,在run()函数中,编写线程所做的事情,在需要线程的文件中,创建线程对象, ...

最新文章

  1. 设计模式-Observer模式
  2. 【01】什么是AJAX
  3. DCMTK:表示增强型CT对象的类
  4. 分享一个蛋疼的俄罗斯方块小游戏
  5. android开发-01-搭建环境
  6. P1048 采药 洛谷Oj
  7. 如何使用简单的接入点扩展您的Wi-Fi网络
  8. 【UWB定位】 - DWM1000模块调试简单心得 - 3
  9. Android系统ANR错误实战分析
  10. 浙江大学的计算机考研难度,浙江大学部分专业考研难度分析
  11. consul服务发现入门篇
  12. 开源集市@中关村|气氛热烈,完美收官!
  13. 《redis设计与实现》-读书笔记
  14. Vue_01_组件的使用
  15. 历届各大IT公司校园招聘笔试面试题汇总
  16. 哪个牌子的护眼台灯适合学生?国AA级照度的护眼台灯
  17. 产品体验报告——百词斩
  18. 微信小程序首次进入引导提示自定义组件
  19. stm32f103c8t6与stm32f103zet6 基于SX1276串口通信-----发送端(二)
  20. openmv ide 2.6.5下载

热门文章

  1. dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?
  2. 2019文献汇总 | 单细胞与病毒感染
  3. 序列的卷积运算与相关运算——MATLAB
  4. AEscripts Fog for Mac - 模拟真实三维体薄雾AE/PR插件
  5. P5712 【深基3.例4】Apples(python3实现)
  6. python交流群教学视频_自学 Python,视频教程和代码一看就懂,动手就废,应该这么学...
  7. XShell笔记-XShell登录脚本的使用
  8. 信息安全工程师笔记-案例分析(一)
  9. 软件设计师习题笔记-重点习题二
  10. 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端