Qt:QTableWidget
0、说明
QTableWidget类提供了一个基于Item的Table视图,如下图:

Table Widget提供了表格用于显示。Table中的每个Item都是QTableWidgetItem对象。
如果我们想要一个存储我们自己的model的Table,应该用QTableView而不是这个类。
Table Widget构造时,传入Table的行数和列数作为参数:
tableWidget = new QTableWidget(12, 3, this);
不过,也可以先构造一个空Table Widget,之后再为它设置行列数:
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount(5);
Item在Table外构造(没有parent widget),之后通过setItem()把它插入到Table中。
QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
(row+1)*(column+1)));
tableWidget->setItem(row, column, newItem);
如果我们想实现排序功能,需要在填充item之后进行,否则会被插入顺序所干扰(可以看setItem()来获取详细信息)。
Table可以设置索引行和索引列。最简单的构造方法是,通过setHorizontalHeaderLabels()和setVerticalHeaderLabels(),传入的参数是索引StringList,List中每一项都是一个索引。更成熟的方法是从已存在的Table Item构造索引Header。例如,我们可以用一个icon和一串文本(aligned text)构造一个特殊索引列。
QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes"));
cubesHeaderItem->setIcon(QIcon(QPixmap(":/Images/cubed.png")));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);
Table中的行数可以通过rowCount()得知,列数可以通过columnCount()得知。通过clear()来清空Table。
1、模块和加载项
| Header: | #include <QTableWidget> |
| qmake: | QT += widgets |
| Inherits: | QTableView |
2、构造
| QTableWidget(int rows, int columns, QWidget *parent = nullptr) | 构造一个指定行列数的空Table |
| QTableWidget(QWidget *parent = nullptr) | 构造一个空Table |
4、成员字段
| int | columnCount | 列数 |
| int | rowCount | 行数 |
6、成员方法
返回值类型 |
方法 |
说明 |
| QWidget * | cellWidget(int row, int column) | 返回一个QWidget展示给定行列的cell |
| void | closePersistentEditor(QTableWidgetItem *item) | 关闭当前Item编辑器 |
| int | column(const QTableWidgetItem *item) | 返回参数Item的所在列 |
| int | columnCount() | 一共多少列 |
| int | currentColumn() | 当前Item所在列 |
| QTableWidgetItem * | currentItem() | 当前Item |
| int | currentRow() | 当前Item所在行 |
| void | editItem(QTableWidgetItem *item) | 如果Item是可编辑的,那么开始编辑该Item |
| QList<QTableWidgetItem *> | findItems(QString text, Qt::MatchFlags flags) | 查找Item |
| QTableWidgetItem * | horizontalHeaderItem(int column) | 返回某一列的行Header Item |
| bool | isPersistentEditorOpen(QTableWidgetItem *item) | Item编辑器是否开启 |
| QTableWidgetItem * | item(int row, int column) | 提取指向指定行、列的Item的指针 |
| QTableWidgetItem * |
itemAt(QPoint point) itemAt(int ax, int ay) |
提取Widget坐标系中指定坐标的Item的指针 |
| QTableWidgetItem * | itemPrototype() | |
| void | openPersistentEditor(QTableWidgetItem *item) | 为给定Item打开编辑器,编辑器在完成编辑后会一直开启 |
| void | removeCellWidget(int row, int column) | 移除指定行列cell的Widget |
| int | row(const QTableWidgetItem *item) | 返回Item的Row |
| int | rowCount() | 行数 |
| QList<QTableWidgetItem *> | selectedItems() | 返回一个List *,其中有所有选中的Items |
| QList<QTableWidgetSelectionRange> | selectedRanges() | |
| void | setCellWidget(int row, int column, QWidget *widget) |
在指定Cell处展示Widget,如果先后在同一个Cell设置了不同的Widget,那么后一个Widget会覆盖前一个 setCellWidget(row, column, new QLineEdit); |
| setColumnCount(int columns) | 重定义列数,如果小于当前列数,则会丢弃多余列 | |
| setCurrentCell(int row, int column) | 设置当前Cell为指定的Cell | |
| setCurrentItem(QTableWidgetItem *item) | 设置当前Item为指定的Item | |
| setHorizontalHeaderItem(int column, QTableWidgetItem *item) | 设置column列的索引Item为item | |
| setHorizontalHeaderLabels(QStringList labels) | 设置索引行标签 | |
| setItem(int row, int column, QTableWidgetItem *item) | 设置指定行列的Item为item | |
| setItemPrototype(const QTableWidgetItem *item) | ||
| setRangeSelected(QTableWidgetSelectionRange range, bool select) | ||
| setRowCount(int rows) | 重定义行数,多出的行会被丢弃 | |
| setVerticalHeaderItem(int row, QTableWidgetItem *item) | 设置row行的索引Item为item | |
| setVerticalHeaderLabels(QStringList labels) | 设置索引列标签 | |
| sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) | 对Table所有行按column列和order规则进行排序 | |
| QTableWidgetItem * | takeHorizontalHeaderItem(int column) | 提取指定column的索引行的Item |
| QTableWidgetItem * | takeItem(int row, int column) | 提取指定行、列的Item |
| QTableWidgetItem * | takeVerticalHeaderItem(int row) | 提取指定row的索引列的Item |
| QTableWidgetItem * | verticalHeaderItem(int row) | 提取指定row的索引列的Item |
| int | visualColumn(int logicalColumn) | 返回给定logicalColumn的可视列 |
| QRect | visualItemRect(const QTableWidgetItem *item) | 返回只有指定Item的矩形视图 |
| int | visualRow(int logicalRow) | 返回给定logicalRow的可视行 |
7、信号
信号 |
说明 |
| cellActivated(int row, int column) | 当指定行列的cell被激活时发送该信号 |
| cellChanged(int row, int column) | 当指定行列的cell中的数据被激活时发送该信号 |
| cellClicked(int row, int column) | 每当Table中的一个cell被点击时发送该信号,信号中的参数是被点击的cell的行、列 |
| cellDoubleClicked(int row, int column) | 每当Table中的一个cell被双击时发送该信号,信号中的参数是被双击的cell的行、列 |
| cellEntered(int row, int column) | 每当鼠标光标进入一个cell时发送该信号,信号中的参数是cell的行、列 |
| cellPressed(int row, int column) | 每当Table中的一个cell被按时,信号中的参数是被按的cell的行、列(可能是键盘?该信号不确定) |
| currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) | 每当Table中的当前聚焦的cell改变时,参数分别标明改变前后的cell的行、列 |
| currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous) | 每当Table中的当前的Item改变时,参数分别标明改变前后的Item |
| itemActivated(QTableWidgetItem *item) | 每当Table中参数指明的Item激活(选中)时,发送该信号 |
| itemChanged(QTableWidgetItem *item) | 每当Table中参数指明的Item改变时,发送该信号 |
| itemClicked(QTableWidgetItem *item) | 每当Table中参数指明的Item被单击时,发送该信号 |
| itemDoubleClicked(QTableWidgetItem *item) | 每当Table中参数指明的Item被双击时,发送该信号 |
| itemEntered(QTableWidgetItem *item) | 每当鼠标焦点进入Table中的某个Item时,发送该信号,参数指明这个Item |
| itemPressed(QTableWidgetItem *item) | 每当Table中的某个Item被按时,发送该信号,参数指明这个Item |
| itemSelectionChanged() | 每当选中的Item改变时发送该信号 |
8、槽
槽 |
说明 |
| clear() | 移除Table中的所有Item,包括索引 |
| clearContents() | 移除Table中的所有Item,不包括索引。 |
| insertColumn(int column) | 在column列插入一个空列 |
| insertRow(int row) | 在row行插入一个空行 |
| removeColumn(int column) | 移除column列 |
| removeRow(int row) | 移除row行 |
| scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible) | 上下滚动视图,以保证item始终可见 |
Qt:QTableWidget的更多相关文章
- PyQt(Python+Qt)学习随笔:QTableWidget中表格各列平均分配宽度的两种方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget表格部件中,如果需要实现表格中各列要占满部件中的可用空间,同时实现各列平分 ...
- PyQt(Python+Qt)学习随笔:QTableWidget的构造方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget有2个构造方法: QTableWidget(QWidget parent = ...
- Qt中 QTableWidget用法总结
转自--> http://edsionte.com/techblog/archives/3014 http://hi.baidu.com/fightiger/item/693aaa0f0f87d ...
- PyQt学习随笔:QTableWidget项sizeHint的作用以及与QHeadView的sectionResizeMode、ResizeToContents的关系
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在学习QTableWidgetItem的sizeHint()方法时,Qt自带材料中介绍sizeHin ...
- Qt:禁止qDebug的输出
Qt:禁止qDebug的输出 在工程的.pro文件里加上以下编译批令即可: DEFINES += QT_NO_DEBUG_OUTPUT
- Qt:使用自定义的字体
Qt:使用自定义的字体 1. 下载字体文件 2. 加载字体文件 3. 使用字体 QFontDatabase::addApplicationFont("XENOTRON.TTF" ...
- PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges ...
- Qt:QJsonObject
0.说明 QJsonObject在逻辑上就是一个Map或Dict!记住这一点对理解它的方法.说明很有帮助. QJsonObject类封装了JSON Object. JSON Object是一个Key- ...
- Qt:QJsonValue
0.说明 QJsonValue类用于操作JSON中的各种数据. JSON是用于存储结构化数据的格式,JSON中的数据可以是六种类型: 基本类型 存储类型 bool QJsonValue::Bool d ...
随机推荐
- 【转载】Systemd 入门教程:实战篇
作者: 阮一峰 日期: 2016年3月 8日 上一篇文章,我介绍了 Systemd 的主要命令,今天介绍如何使用它完成一些基本的任务. 一.开机启动 对于那些支持 Systemd 的软件,安装的时候, ...
- 业务驱动的全景监控体系在阿里的应用 | 阿里巴巴DevOps实践指南
编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...
- 从故纸堆里,回顾下Web技术的发展历程
通过对比这些年的计算机图书来让大家感受下前些年Web技术的发展历程. Web开发框架,目前是Spring Boot+JPA,我正好出过本书,从中大家能感受到现在的技术. <Spring Boot ...
- 读 Go 源码,可以试试这个工具
原文链接: 读 Go 源码,可以试试这个工具 编程发展至今,从面向过程到面向对象,再到现在的面向框架.写代码变成了一件越来越容易的事情. 学习基础语法,看看框架文档,几天时间搞出一个小项目并不是一件很 ...
- Hive安装教程
Hive的安装和使用 我的版本: JAVA_HOME=/usr/local/soft/jdk1.8.0_171 HADOOP_HOME=/usr/local/soft/hadoop-2.7.6 HIV ...
- Linux下Mysql端口修改及防火墙开端口
用户权限问题:https://blog.csdn.net/weixin_43670802/article/details/103019598 Linux下修改Mysql默认的3306端口 如下: 1. ...
- 前端也能做AI
殷圣魁 58架构师 7月16日 原文链接 前言 相信不少人看过一篇人工智能已经能实现自动编写HTML,CSS的文章,人工智能开始取代前端的一部分工作.前端开发行业真的被人工智能取代吗? 1.人工智能发 ...
- 开发时Blocks跟Delegates如何选择----董鑫
1.大多数delegate protocols 都拥有几个消息源. 以GKMatch为例(A GKMatch object provides a peer-to-peer network betwee ...
- Socket和数据库的一些使用---郭雪彬
最近偶尔有时间,研究了下Socket的使用,虽然不简单,不过还是挺有意思,刚好咱们带头大哥需要我们发檄文,也罢,那就来一篇,废话不多说,直接入正题 struct sockaddr_in server_ ...
- 模型融合——stacking原理与实现
一般提升模型效果从两个大的方面入手 数据层面:数据增强.特征工程等 模型层面:调参,模型融合 模型融合:通过融合多个不同的模型,可能提升机器学习的性能.这一方法在各种机器学习比赛中广泛应用, 也是在比 ...