QT学习之表格控件的更多细节

恩上次还有一些细节遗漏了,就是关于表格组件的几个成员函数

verticalHeader()的hide()函数将垂直的表头隐藏,若不隐藏,则表格的头部会多显示出来一格。

horizintalHeader()的setStretchLastSection(true)功能则是将空余的空间填充完,不留空白,大家可以试试传递一个FALSE值

看看效果,也就是说表格组件还有更多可以自定义的设置,大家可以参看QT官网的文档,非常详细。

### 创建和使用多层次结构的 QTableView 或 QTableWidget #### 使用 QTableView 实现多层级表格 对于 `QTableView` 来说,实现复杂的多层表头通常涉及自定义模型类继承于 `QAbstractTableModel` 并重写必要的虚函数来提供层次化数据支持。为了设置多级表头,在初始化阶段可以调用 `setHorizontalHeaderLabels()` 方法为每一列指定标签名称,并通过 `horizontalHeader().setDefaultSectionSize()` 设置默认宽度。 如果要创建更复杂的分组效果,则可能需要利用代理模型 (`QSortFilterProxyModel`) 对原始数据源进行转换或将多个独立的数据集组合起来显示在一个视图内[^1]。 ```cpp // 自定义模型示例代码片段 class CustomTableModel : public QAbstractTableModel { // ...其他成员变量... public: int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; private: QStringList m_columnHeaders; // 存储各列标题 }; ``` #### 使用 QTableWidget 实现多层级表格 相比之下,`QTableWidget` 更适合用于快速构建具有静态内容或少量动态更新需求的应用程序。当涉及到较为简单的多层表头时,可以直接操作 widget 的属性来进行配置: - 调整水平方向上的子项布局以形成嵌套样式; - 利用单元格合并功能(如 setSpan() 函数),使某些头部跨越多行或多列从而模拟出分级的效果; 不过需要注意的是,这种方式灵活性较低,不适合处理非常复杂的情况。对于更加高级的需求还是建议采用基于 Model/View 架构的方式去定制解决方案[^2]。 ```python table_widget.setRowCount(5) table_widget.setColumnCount(3) # 合并第一列作为父节点 table_widget.setSpan(0, 0, 2, 1) for row in range(table_widget.rowCount()): for col in range(table_widget.columnCount()): item = QTableWidgetItem(f"Item {row},{col}") table_widget.setItem(row, col, item) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值