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);
...
setCellWidget(row, column, new QTextEdit);
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的更多相关文章

  1. PyQt(Python+Qt)学习随笔:QTableWidget中表格各列平均分配宽度的两种方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget表格部件中,如果需要实现表格中各列要占满部件中的可用空间,同时实现各列平分 ...

  2. PyQt(Python+Qt)学习随笔:QTableWidget的构造方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget有2个构造方法: QTableWidget(QWidget parent = ...

  3. Qt中 QTableWidget用法总结

    转自--> http://edsionte.com/techblog/archives/3014 http://hi.baidu.com/fightiger/item/693aaa0f0f87d ...

  4. PyQt学习随笔:QTableWidget项sizeHint的作用以及与QHeadView的sectionResizeMode、ResizeToContents的关系

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在学习QTableWidgetItem的sizeHint()方法时,Qt自带材料中介绍sizeHin ...

  5. Qt:禁止qDebug的输出

    Qt:禁止qDebug的输出 在工程的.pro文件里加上以下编译批令即可: DEFINES += QT_NO_DEBUG_OUTPUT

  6. Qt:使用自定义的字体

    Qt:使用自定义的字体 1. 下载字体文件 2. 加载字体文件 3. 使用字体   QFontDatabase::addApplicationFont("XENOTRON.TTF" ...

  7. PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges ...

  8. Qt:QJsonObject

    0.说明 QJsonObject在逻辑上就是一个Map或Dict!记住这一点对理解它的方法.说明很有帮助. QJsonObject类封装了JSON Object. JSON Object是一个Key- ...

  9. Qt:QJsonValue

    0.说明 QJsonValue类用于操作JSON中的各种数据. JSON是用于存储结构化数据的格式,JSON中的数据可以是六种类型: 基本类型 存储类型 bool QJsonValue::Bool d ...

随机推荐

  1. 【转载】Systemd 入门教程:实战篇

    作者: 阮一峰 日期: 2016年3月 8日 上一篇文章,我介绍了 Systemd 的主要命令,今天介绍如何使用它完成一些基本的任务. 一.开机启动 对于那些支持 Systemd 的软件,安装的时候, ...

  2. 业务驱动的全景监控体系在阿里的应用 | 阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...

  3. 从故纸堆里,回顾下Web技术的发展历程

    通过对比这些年的计算机图书来让大家感受下前些年Web技术的发展历程. Web开发框架,目前是Spring Boot+JPA,我正好出过本书,从中大家能感受到现在的技术. <Spring Boot ...

  4. 读 Go 源码,可以试试这个工具

    原文链接: 读 Go 源码,可以试试这个工具 编程发展至今,从面向过程到面向对象,再到现在的面向框架.写代码变成了一件越来越容易的事情. 学习基础语法,看看框架文档,几天时间搞出一个小项目并不是一件很 ...

  5. Hive安装教程

    Hive的安装和使用 我的版本: JAVA_HOME=/usr/local/soft/jdk1.8.0_171 HADOOP_HOME=/usr/local/soft/hadoop-2.7.6 HIV ...

  6. Linux下Mysql端口修改及防火墙开端口

    用户权限问题:https://blog.csdn.net/weixin_43670802/article/details/103019598 Linux下修改Mysql默认的3306端口 如下: 1. ...

  7. 前端也能做AI

    殷圣魁 58架构师 7月16日 原文链接 前言 相信不少人看过一篇人工智能已经能实现自动编写HTML,CSS的文章,人工智能开始取代前端的一部分工作.前端开发行业真的被人工智能取代吗? 1.人工智能发 ...

  8. 开发时Blocks跟Delegates如何选择----董鑫

    1.大多数delegate protocols 都拥有几个消息源. 以GKMatch为例(A GKMatch object provides a peer-to-peer network betwee ...

  9. Socket和数据库的一些使用---郭雪彬

    最近偶尔有时间,研究了下Socket的使用,虽然不简单,不过还是挺有意思,刚好咱们带头大哥需要我们发檄文,也罢,那就来一篇,废话不多说,直接入正题 struct sockaddr_in server_ ...

  10. 模型融合——stacking原理与实现

    一般提升模型效果从两个大的方面入手 数据层面:数据增强.特征工程等 模型层面:调参,模型融合 模型融合:通过融合多个不同的模型,可能提升机器学习的性能.这一方法在各种机器学习比赛中广泛应用, 也是在比 ...