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. 查看WordPress网站使用的主题和插件

    阅读原文 whatwpthemeisthat.com 很多时候在网上看到某个WordPress的主题很漂亮,很想要这个主题,又联系不上博客的联系人的时候,我们可以通过以下方法进行查看. 一.手动扒代码 ...

  2. 字节跳动的一道python面试题

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 lst = ['hongkong','xiantyk','chinat','guangdong','z'] lst ...

  3. 将string字符串中的换行符进行替换

    /** * 方法名称:replaceBlank * 方法描述: 将string字符串中的换行符进行替换为"" * */ public static String replaceBl ...

  4. java实现多线程生产者消费者模式

    1.概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消 ...

  5. 在TCP文件传输中如何判断java流的末尾

    感谢前辈们的解答:https://bbs.csdn.net/topics/280085530 问题描述: 服务端向客户端发送数据流,服务端发完了数据不关闭流. 我在客户端读流,我无法读到-1,所以无法 ...

  6. Shell中的变量替换

    ${str-newStr} 仅当str为null的时候替换 ${str:-newStr} 当str为null或者str为空字符串的时候替换 综上,-号,当str没有内容,则替换, :号只是增加了空字符 ...

  7. Java开发调试技巧及Eclipse快捷键使用方法

    1. 快捷键 syso 通过打印输出来调试,println可接受object型的参数,能输出任何类型 Syso输出的是黑色字体,代表的是Debug的信息 Syse,输出的是红色字体,代表错误的输出信息 ...

  8. 替小白整理的 linux基操命令 切勿扣6 不用感谢

    Linux --------小白必会的基本命令 命令行提示字符[root@localhost ~]#[当前登录系统的用户@主机名称 当前所在的目录]## 表示为管理员登录$ 表示为普通用户登录   切 ...

  9. 交换机基本原理与VRP基础及操作

    交换机基本原理与VRP基础及操作 目录 交换机基本原理与VRP基础及操作 一.数据链路层 1.数据链路层的位置 2.数据链路层的功能 二.以太网(Ethernet) 1.以太网的概念 2.MAC地址( ...

  10. JS快速入门(二)

    目录 JS快速入门(二) 结构图 BOM window对象 open() window子对象 location对象 history对象(了解) navigator 对象 screen对象 BOM 定时 ...