当前位置: 首页 > news >正文

qt QHeaderView详解

1、概述

QHeaderView 是 Qt 框架中的一个类,它通常作为 QTableView、QTreeView 等视图类的一部分,用于显示和管理列的标题(对于水平头)或行的标题(对于垂直头)。QHeaderView 提供了对这些标题的排序、筛选、调整大小等功能,并允许用户通过拖动列宽分隔符来调整列的宽度。默认情况下,QTableView 和 QTreeView 使用 QHeaderView 的实例作为其头部视图。

2、重要方法

QHeaderView 提供了多种方法来操作头部视图,以下是一些关键的方法:

  • setSectionResizeMode:设置列的宽度调整模式,如固定宽度(Fixed)、可调整(Resizable)、拉伸填充(Stretch)等。
  • sectionResizeMode:获取列的宽度调整模式。
  • resizeSections:根据给定的模式调整所有列的宽度,例如使所有列具有相同的宽度或根据内容调整列宽。
  • setStretchLastSection:设置是否让最后一列(或行)拉伸以填充剩余空间。
  • isStretchLastSection:检查是否启用了最后一列(或行)的拉伸功能。
  • setSortIndicator:设置排序指示器,显示当前排序的列(或行)和排序顺序(升序或降序)。
  • sortIndicator:获取当前的排序指示器信息。
  • setDefaultSectionSize:设置默认的列(或行)宽度(或高度)。
  • defaultSectionSize:获取默认的列(或行)宽度(或高度)。
  • setDefaultAlignment:设置标题文本的对齐方式。
  • setSectionsMovable:设置是否允许用户通过拖动来重新排列列(或行)。
  • sectionsMovable:检查是否允许列(或行)的移动。
  • setSectionsClickable:设置是否允许用户点击列(或行)标题来触发排序等操作。
  • sectionsClickable:检查是否允许点击列(或行)标题。
  • visualIndex:将逻辑索引(即模型中的索引)转换为视觉索引(即显示中的索引),考虑到了列(或行)的移动和隐藏。
  • modelToView 和 viewToModel:将模型索引转换为视图索引,或将视图索引转换为模型索引。
3、重要信号

QHeaderView 发射的信号通常与列的排序、大小调整、点击等操作相关:

  • sectionClicked:当用户点击列(或行)标题时发射。
  • sectionPressed:当用户按下鼠标按钮在列(或行)标题上时发射。
  • sectionReleased:当用户释放鼠标按钮在列(或行)标题上时发射。
  • sectionDoubleClicked:当用户双击列(或行)标题时发射。
  • sectionResized:当列(或行)的宽度(或高度)发生变化时发射。
  • sectionMoved:当列(或行)被移动时发射(如果设置了 sectionsMovable)。
  • sortIndicatorChanged:当排序指示器发生变化时发射,例如用户点击了列标题以改变排序顺序。
  • geometriesChanged:当头部视图中各个部分的几何形状发生变化时发射(这通常是一个内部信号,用户很少直接使用)。
#include <QApplication>  
#include <QTableView>  
#include <QHeaderView>  
#include <QStandardItemModel>  
#include <QDebug>  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  // 创建一个 QTableView 实例  QTableView tableView;  // 设置水平头部视图(QHeaderView)的属性  QHeaderView *header = tableView.horizontalHeader();  header->setSectionResizeMode(QHeaderView::Stretch); // 设置列宽拉伸填充  header->setSortIndicatorShown(true); // 显示排序指示器  header->setSectionsClickable(true); // 允许点击列标题进行排序  // 创建一个模型并设置给 QTableView  QStandardItemModel model(4, 3); // 4行3列  model.setHorizontalHeaderLabels(QStringList() << "Column 1" << "Column 2" << "Column 3");  for (int row = 0; row < 4; ++row) {  for (int col = 0; col < 3; ++col) {  model.setItem(row, col, new QStandardItem(QString("Item %1-%2").arg(row).arg(col)));  }  }  tableView.setModel(&model);  // 连接 sectionClicked 信号到槽函数  QObject::connect(header, &QHeaderView::sectionClicked, [&](int logicalIndex) {  qDebug() << "Clicked header section:" << logicalIndex;  // 这里可以根据逻辑索引获取列名或进行排序操作  // 例如:QString columnName = model.headerData(logicalIndex, Qt::Horizontal, Qt::DisplayRole).toString();  // 或者:tableView.sortItems(logicalIndex);  });  // 显示 QTableView  tableView.show();  return app.exec();  
}

觉得有帮助的话,打赏一下呗。。

           

http://www.lryc.cn/news/479414.html

相关文章:

  • 探索PickleDB:Python中的轻量级数据存储利器
  • yocto下编译perf失败的解决方法
  • 丹摩征文活动|详解 DAMODEL(丹摩智算)平台:为 AI 开发者量身打造的智算云服务
  • ORACLE _11G_R2_ASM 常用命令
  • 掌握Rust模式匹配:从基础语法到实际应用
  • HFSS 3D Layout中Design setting各个选项的解释
  • 线性表之链表详解
  • C/C++使用AddressSanitizer检测内存错误
  • 【EI和Scopus检索】国际人工智能创新研讨会(IS-AII 2025)
  • 在OceanBase 中,实现自增列的4种方法
  • LWE算法分类及基本加解密算法示例
  • 【论文阅读】Learning dynamic alignment via meta-filter for few-shot learning
  • 蓝牙 SPP 协议详解及 Android 实现
  • 系统学习领域驱动设计-感悟-高尚名词篇
  • 人工智能(AI)和机器学习(ML)技术学习流程
  • <Project-20 YT-DLP> 给视频网站下载工具 yt-dlp/yt-dlp 加个页面 python web
  • 【Android】Gradle 7.0+ 渠道打包配置
  • Web应用性能测试工具 - httpstat
  • MySQL 【流程控制】函数
  • python 天气数据可视化
  • 【HarmonyOS Next】数据本地存储:@ohos.data.preferences
  • 使用BaGet快速搭建nuget服务
  • 基于Zynq FPGA的雷龙SD NAND存储芯片性能测试
  • 【功能介绍】信创终端系统上各WPS版本的授权差异
  • Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
  • 性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
  • (vue3)在Pinia Store中正确使用Vue I18n
  • 如何开发查找附近地点的微信小程序
  • 三格电子——电梯监测状态项目
  • C#-运算符重载