天天看点

Qt扫盲-QTableWidget理论总结

QTableWidget理论总结

    • 1. 概述
    • 2. QTableWidgetItem 概述
    • 3. 表头设置
    • 4. 常用功能
    • 5. 常用信号
    • 6. 槽函数
    • 7. 外观

1. 概述

QTableWidget 是 Qt 提供的一个简单方便、标准的表格显示类。QTableWidget 中的 单元格数据 由 QTableWidgetItem 显示如果 想要一个使用你自己定义modle 的表,你应该使用 QTableView 。

Qt扫盲-QTableWidget理论总结

QTableWidget 可以使用所需的行数和列数来构造一个对象:

或者,可以在没有给定大小的情况下构造表,并在以后调整大小:

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 填充表格后再启用排序功能,否则排序可能会干扰顺序。

表格的结构如下

Qt扫盲-QTableWidget理论总结

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. 表头设置

Qt扫盲-QTableWidget理论总结

表头的话就像上图一样

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() 函数清除该表。

  1. 可以通过 row () 和 column() 获取到某一个 QTableWidgetItem 的位置、也可以通过 item() 来定位到具体的Item
  2. currentColumn() 、currentItem() 、currentRow() 获取当前选择的 单个 Item 的位置
  3. 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 来调整大小。

继续阅读