QTableWidget理论总结
-
1. 概述
-
2. QTableWidgetItem 概述
-
3. 表头设置
-
4. 常用功能
-
5. 常用信号
-
6. 槽函数
-
7. 外观
1. 概述
QTableWidget 是 Qt 提供的一个简单方便、标准的表格显示类。QTableWidget 中的 单元格数据 由
QTableWidgetItem
显示如果 想要一个使用你自己定义modle 的表,你应该使用 QTableView 。
QTableWidget 可以使用所需的行数和列数来构造一个对象:
tableWidget = new QTableWidget(12, 3, this);
或者,可以在没有给定大小的情况下构造表,并在以后调整大小:
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount(5);
但是记得一定要设置好列数或者函数。没设置行列大小的时候,去 setItem() 的时候会出问题的,设置不成功的。
QTableWidgetItem 在表外部创建(没有父小部件),并使用 setItem() 插入到表中:
QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
(row+1)*(column+1)));
tableWidget->setItem(row, column, newItem);
如果要在QTableWidget中启用排序功能,请在用QTableWidgetItem 填充表格后再启用排序功能,否则排序可能会干扰顺序。
表格的结构如下
2. QTableWidgetItem 概述
Qt 提供的像列表、表格之类的标准 Item 类的功能基本都一致的。每一个单元格内容其实就是 一个 Item。每个Item可以包含多条信息,并将适当地显示它们。
其实知道 QTableWidgetItem 能 显示并编辑文本、还能check 就够用了。
QTableWidgetItem 通常用于显示 文本 text() 和 图标 icon ()
。这些是使用 setText() 和 setIcon() 函数设置的。文本的外观可以使用 setFont() 、setForeground() 和 setBackground() 进行自定义。列表项中的文本可以使用 setTextAlignment() 函数对齐。工具提示、状态提示和“这是什么?”帮助可以添加到使用 setToolTip() 、setStatusTip() 和 setWhatsThis() 的列表项中。
默认情况下,Item是 enabled, selectable, checkable的,并且配置 成可拖放、可编辑、可点击 check 的。这都是属于Item 的标志。
每个Item的标志可以通过使用适当的值调用setFlags() 来更改(参见Qt::ItemFlags)。可以使用 setCheckState() 函数检查、取消选中和部分检查可检查的Item。相应的 checkState() 函数指示Item的当前检查状态。
常用的标志像下面
标志名
|
含义
|
Qt::NoItemFlags
|
完全禁用
|
Qt::ItemIsSelectable
|
item可被选中
|
Qt::ItemIsEditable
|
item可被编辑
|
Qt::ItemIsDragEnabled
|
item可被 拖住
|
Qt::ItemIsDropEnabled
|
item可被 放置
|
Qt::ItemIsUserCheckable
|
item可用 check 的类似 QCheckBox
|
Qt::ItemIsEnabled
|
item可用不
|
isHidden() 函数可用于确定Item是否隐藏。要隐藏Item,请使用 setHidden() 。
3. 表头设置
表头的话就像上图一样
QTableWidget 可以同时提供水平和垂直标题。创建标头的最简单方法是向 setHorizontalHeaderLabels() 和 setVerticalHeaderLabels() 函数提供字符串列表。这些将为表的列和行提供简单的文本标题。
也可以从通常在表外部构造的现有表项创建更复杂的标头。
例如,我们可以构造一个带有图标和对齐文本的表格项,并将其用作特定列的标题:
QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes"));
cubesHeaderItem->setIcon(QIcon(QPixmap(":/Images/cubed.png")));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);
一般获取 表头的话 通过 QTableView 的函数
QHeaderView * horizontalHeader() const :获取水平表头
QHeaderView * verticalHeader() const :获取垂直表头
在 控制外观这些 比如这个表格内容填充整个窗口呀,列宽,列高都是通过设置 QHeaderView 的某些属性来完成的。
4. 常用功能
表中的行数可以用 rowCount() 找到,列数可以用columnCount() 找到。可以使用 clear() 函数清除该表。
-
可以通过 row () 和 column() 获取到某一个 QTableWidgetItem 的位置、也可以通过 item() 来定位到具体的Item
-
currentColumn() 、currentItem() 、currentRow() 获取当前选择的 单个 Item 的位置
-
findItems() 查找满足条件的 QTableWidgetItem
5. 常用信号
很多信号其实你看一眼就大致知道是干嘛的了。
信号名
|
含义
|
cellActivated(int row, int column)
|
就是具体哪一个单元格被激活,激活可能是单击、双击、
|
cellChanged(int row, int column)
|
就是具体哪一个单元格内容改变了,可能是文字、图标内容改变了
|
cellClicked(int row, int column)
|
就是具体哪一个单元格被单击了
|
cellDoubleClicked(int row, int column)
|
就是具体哪一个单元格被双击了
|
cellEntered(int row, int column)
|
|
cellPressed(int row, int column)
|
就是具体哪一个单元格被按下了
|
currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
|
发生了新的单元格被选择了
|
currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
|
发生了新的单元格被选择了
|
itemActivated(QTableWidgetItem *item)
|
就是具体哪一个item 被激活,和 cellActivated 一样
|
itemChanged(QTableWidgetItem *item)
|
和 cellChanged一样
|
itemClicked(QTableWidgetItem *item)
|
和 cellClicked一样
|
itemDoubleClicked(QTableWidgetItem *item)
|
和 cellDoubleClicked一样
|
itemEntered(QTableWidgetItem *item)
|
和 cellEntered 一样
|
itemPressed(QTableWidgetItem *item)
|
和 cellPressed一样
|
itemSelectionChanged()
|
其实就是发生了新的选择,可能是某一个区域被选择了
|
6. 槽函数
信号名
|
含义
|
clear()
|
移除所有单元格包括表头
|
clearContents()
|
只移除所有单元格、不移除表头
|
insertColumn(int column)
|
插入一个指定位置的空白列
|
insertRow(int row)
|
插入一个指定位置的空白行
|
removeColumn(int column)
|
移除某一列 及其 在该列的单元格
|
removeRow(int row)
|
移除某一行 及其 在该列的单元格
|
scrollToItem()
|
把表格滚动到某一个单元格处。
|
7. 外观
在外观的方面主要有两个控制源 一、QTableView ; 二、QHeaderView
-
QTableView
在 QTableView 的设置就 5个
外观属性名
|
含义
|
cornerButtonEnabled
|
最左上脚按钮是否可用
|
gridStyle
|
网格的样式
|
showGrid
|
是否展示网格
|
sortingEnabled
|
是否可排序
|
wordWrap
|
就是单元格内容太长、换不换行
|
-
QHeaderView
其实就是控制 标签的长宽,因为每个单元格都是由 horizontalHeader、verticalHeader 的长宽来限制出大小嘛。
这个
外观属性名
|
含义
|
defaultAlignment
|
就是 表头的 文字对齐方式
|
defaultSectionSize
|
单元格的默认长
|
firstSectionMovable
|
第一个 表头可以移动不
|
highlightSections
|
是否高亮 显示 被选中的表头
|
maximumSectionSize
|
单元格的默认长
|
minimumSectionSize
|
单元格的默认长
|
showSortIndicator
|
是否展示 排序的箭头
|
stretchLastSection
|
就是把最后一个表头占满整个表格控件
|
还有就是 setSectionResizeMode() 就设置单元格是否自动把表格占满,很多模式可以选择的,我一般用的 QHeaderView::Stretch :QHeaderView将自动调整该部分的大小以填充可用空间。用户无法更改大小,也无法以编程方式更改大小。就交给 QHeaderView 来调整大小。