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:将逻辑索引(即模型中的索引)转换为视觉索引(即显示中的索引),考虑到了列(或行)的移动和隐藏。
  • modelToViewviewToModel:将模型索引转换为视图索引,或将视图索引转换为模型索引。
3、重要信号

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

  • sectionClicked:当用户点击列(或行)标题时发射。

  • sectionPressed:当用户按下鼠标按钮在列(或行)标题上时发射。

  • sectionReleased:当用户释放鼠标按钮在列(或行)标题上时发射。

  • sectionDoubleClicked:当用户双击列(或行)标题时发射。

  • sectionResized:当列(或行)的宽度(或高度)发生变化时发射。

  • sectionMoved:当列(或行)被移动时发射(如果设置了 sectionsMovable)。

  • sortIndicatorChanged:当排序指示器发生变化时发射,例如用户点击了列标题以改变排序顺序。

  • geometriesChanged:当头部视图中各个部分的几何形状发生变化时发射(这通常是一个内部信号,用户很少直接使用)。

    #include
    #include
    #include
    #include
    #include

    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();  

    }

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

相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner12 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能14 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G14 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt