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 来调整大小。