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. ansible lineinfile 关闭selinux

  2. pyhon笔记入门

    人生苦短,我用Python 博客园精华区01-15 23:46 (一)认识Python Python背景介绍 Python的格言: Life is short,use python. (人生苦短,我用 ...

  3. th 表达式的简单使用。

    一.使用场景,页面中,循环遍历,获得控制器穿过来的值. 1.1 控制器 /** * 获得所有的图书信息 * @return */ @RequestMapping("/turnIndexPag ...

  4. navicat连接mysql报错1251解决方案

    感谢原文作者:XDMFC 原文链接:https://blog.csdn.net/xdmfc/article/details/80263215 问题描述 今天下了个 MySQL8.0,发现Navicat ...

  5. 使用@WebServlet等注解需要i注意的

    Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性,该属性指定当前的部署描述文件是否是完全的.如果设置 ...

  6. SpringBoot+Dubbo+ZooKeeper+Maven入门实践

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11798626.html 注*** 本实例为仅适合初学者,关于dubbo和springboot以 ...

  7. 关于 BSGS 以及 ExBSGS 算法的理解

    BSGS 引入 求解关于\(X\)的方程, \[A^X\equiv B \pmod P \] 其中\(Gcd(A,P)=1\) 求解 我们令\(X=i*\sqrt{P}-j\),其中\(0<=i ...

  8. Scala概述及环境配置

    一.概述 1.1 为什么要学Scala? Spark是新一代的内存级大数据的计算框架,是大数据学习的重要内容.随着Spark的兴起,同时也带动了Scala的学习,因为Spark就是Scala编写的.为 ...

  9. linux_18

    简述keepalived工作原理 编译安装haproxy 总结haproxy各调度算法的实现方式及其应用场景 使用haproxy的ACL实现基于文件后缀名的动静分离

  10. python基础语法_python中的布尔类型详解

    转自:http://www.cnblogs.com/521yywzyzhc/p/6264885.html   我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是 ...