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. 浅谈kali : arpspoof工具原理

    Arpspoof工具 介绍 arpspoof是一个通过ARP协议伪造数据包实现中间人攻击的kali工具. 中间人攻击虽然古老,但仍处于受到黑客攻击的危险中,可能会严重导致危害服务器和用户.仍然有很多变 ...

  2. was 9.0 install

    Installation Manager 下载地址 https://www-945.ibm.com/support/fixcentral/swg/downloadFixes?parent=ibm~Ra ...

  3. 人口信息普查系统-JavaWeb-四

    今天给大家分享前端人口登记页面,人口查询页面 人口登记 <%@ page language="java" contentType="text/html; chars ...

  4. 通过Python自带模块SimpleHTTPServer快速共享服务的配置文件

    简介 SimpleHTTPServer是Python 2自带的一个模块,是Python的Web服务器,简单小巧,快速启动. 它在Python 3已经合并到http.server模块中. SimpleH ...

  5. Java基础复习(四)

    1.Integer与int的区别 int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默 ...

  6. byte溢出栗子

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11634402.html byte溢出测试: byte b1 = (byte) 127; byt ...

  7. iOS应用跳转至app store 评分页

    小功能之去AppStore评分 #pragma mark - 去AppStore评分 -(void)goToAppStore { NSString *str = [NSString stringWit ...

  8. Nodejs允许跨域访问

    状况:本地的前端项目(uni-app)以及后台管理(vue-mongo-node)和本地mongo数据库 前台项目端口是8082,后台数据接口是8081. 跨域解决,直接上代码: uni-app的ma ...

  9. 1Python运行Appium测试的例子

    电脑系统配置:Windows7的64位 1.Python sample(Python示例)下载 https://github.com/appium/sample-code/tree/master/sa ...

  10. 面试题之java缓存总结,从单机缓存到分布式缓存架构

    1.缓存定义 高速数据存储层,提高程序性能 2.为什么要用缓存(读多写少,高并发) 1.提高读取吞吐量 2.提升应用程序性能 3.降低数据库成本 4.减少后端负载 5.消除数据库热点 6.可预测的性能 ...