前言

QAbstractTableModel 继承自 QAbstractItemModel,主要用于为 QTableView 提供相关接口,我们可以子类化该抽象类并实现相关接口。本文主要讲 QAbstractTableModel 为 QHeaderView 表头提供的接口如何使用。

(请确保自己已经熟悉了 rowCount、columnCount、data 等基础的接口)

表头相关接口的使用

一个完整的 QTableView 还包含了行列两个 QHeaderView 表头,表头的 model 可以独立设置,但是一般用 tablemodel 的相关接口提供数据就行了。接口如下:

//获取表头数据
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
//设置表头数据
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;

我们可以看下 Qt 源码中这两个接口的默认实现:

QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const
{Q_UNUSED(orientation);if (role == Qt::DisplayRole)return section + 1;return QVariant();
}bool QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation,const QVariant &value, int role)
{Q_UNUSED(section);Q_UNUSED(orientation);Q_UNUSED(value);Q_UNUSED(role);return false;
}

默认实现直接返回的行列号,我们可以进一步完善,还可以提供一个自定义接口直接设置表头的文本。效果如下:

void MyTableModel::setHorHeaderData(const QList<QString> &headers)
{//自定义的表头设置接口,horHeaderData为QList<QString>成员变量horHeaderData=headers;emit headerDataChanged(Qt::Horizontal, 0, headers.count()-1);
}QVariant MyTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{//注意,如果用了sortproxymodel,这个section是实际数据的index,不是界面看到的index//区分横表头和竖表头if(orientation == Qt::Horizontal){//这里我们只设置居中对齐和文本if (role == Qt::DisplayRole){//这里把横项列表头的文本设计为可以设置的if(section>=0 && section<horHeaderData.count())return horHeaderData.at(section);return QString("Col %1").arg(section + 1);}else if(role == Qt::TextAlignmentRole){return Qt::AlignCenter;}}else{if (role == Qt::DisplayRole)return QString("Row %1").arg(section + 1);else if(role == Qt::TextAlignmentRole)return Qt::AlignCenter;}return QVariant();
}bool MyTableModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
{//设计为横项列表头可以设置if (orientation == Qt::Horizontal && section>=0 && section<horHeaderData.count()) {horHeaderData[section] = value.toString();emit headerDataChanged(orientation, section, section);return true;}return false;
}

表头相关操作

QHeaderView 提供了一些便捷设置,如是否选中后高亮、拖拽交换行等,可以使用 view 的 verticalHeader() 或 horizontalHeader() 接口获取实例对其进行设置。

table 设置 setSortingEnabled(true) 后就可以点击表头排序了,不过排序逻辑需要我们通过 model 的 sort 接口或者用 sortproxymodel 来完成。

table->setSortingEnabled(true);

其他常用设置项:

    //表头实例QHeaderView *header=table->horizontalHeader();//拖拽交换行header->setSectionsMovable(true);//如何决策宽高header->setSectionResizeMode(QHeaderView::Fixed);//是否可以点击header->setSectionsClickable(false);//选中时高亮header->setHighlightSections(false);//默认宽高,放到table设置宽高的接口前,不然被覆盖header->setDefaultSectionSize(100);//最后一列填充header->setStretchLastSection(true);//排序table->setSortingEnabled(true);//设置第三列列宽//table->setColumnWidth(2,200);

参考

官方文档:https://doc.qt.io/qt-5/qabstracttablemodel.html

官方文档:https://doc.qt.io/qt-5/model-view-programming.html

官方文档:https://doc.qt.io/qt-5/qabstractitemmodel.html

QAbstractTableModel基本使用:表头相关接口相关推荐

  1. 腾讯微博API时间线相关接口返回的微博信息中head值使用问题

    腾讯微博API时间线相关接口返回的微博信息中head值表示作者头像url,这个链接直接访问并不能使用,需要再附加一个参数指定图片的大小(100.50),比如:[head]/100.

  2. 框架:Spring之Aware相关接口

    一.Aware相关接口 对于应用程序来说,应该尽量减少对Sping Api的耦合程度,然而有些时候为了运用Spring所提供的一些功能,有必要让Bean了解Spring容器对其进行管理的细节信息,如让 ...

  3. java hook 框架_hook框架-frida简单使用模板以及frida相关接口

    一目录结构 ├── test.py #py脚本 └── test.js #js脚本 一.py脚本 test.py import frida import sys #连接设备app dev=frida. ...

  4. c语言不循环链表,无头单向不循环链表相关接口实现(C语言)

    单链表相关接口介绍List.h #define _CRT_SECURE_NO_WARNINGS #ifndef __LIST_H__ #define __LIST_H__ #include #incl ...

  5. 接口规范 12. 自动删除相关接口

    12 自动删除相关接口 12.1.查询自动删除任务 用途 查询服务器上的自动删除任务. 自动删除任务是一种运行在服务器上的服务,按照定义的规则自动删除过期的视频内容.例如,对于监控和视频直播类业务,可 ...

  6. 接口规范 11. 串流相关接口

    11 串流相关接口 11.1.查询串流任务 用途 查询服务器上的串流任务. 请求 streamingMgr/?request=get_streaming&id= id 串流任务在服务器上的唯一 ...

  7. 接口规范 10. 并发限制相关接口

    10 并发限制相关接口 10.1.查询并发限制配置 用途 查询某个应用的播出并发限制值. 如果一个应用设置了并发限制值,当访问该应用下视频流的并发数超过该值时,终端的播出请求会被禁止. 这个限制值是该 ...

  8. 接口规范 9. 推流认证相关接口

    9 推流认证相关接口 9.1.开启推流认证 用途 针对某个应用,开启推流认证. 开启推流认证后,所有向该应用下的推送直播流的请求都需要做合法性认证,只有认证通过的请求才会允许推送. 认证的方法包括to ...

  9. 接口规范 8. 播出认证相关接口

    8 播出认证相关接口 8.1.开启播出认证 用途 针对某个应用,开启播出认证. 开启播出认证后,所有播放该应用下的视频流的请求都需要做合法性认证,只有认证通过的请求才会允许播放. 认证的方法包括tok ...

最新文章

  1. python命令之m参数 局域网传输
  2. 百度员工吐槽:百度江河日下,不知该何去何从?
  3. 面向自然语言处理的深度学习
  4. awd的批量脚本 pwn_AWD攻防之web入门篇
  5. 前端学习(2531):Vuex中getter
  6. 详细解析Linux /etc/passwd文件
  7. Android Studio(3)---键盘快捷键
  8. 列出spring security的所有SecurityFilterChain
  9. JDBC(14)—对DAO进行改进修改
  10. JSP的自定义标签(三)之带标签体的标签
  11. SharePoint 2013 开发——开发并部署Provider-hosted APP
  12. android 热补丁工具,Hotfix补丁工具报错排查步骤
  13. linux系统双显示器怎么设置复制,linux系统双显示器设置
  14. 瀚高数据库企业版中的权限问题
  15. 光电开关与光耦的区别 - 光电开关电子电路图
  16. C/C++基础 hypot函数
  17. 家用无线TP-LINK路由器使用一段时间后,频繁断网解决办法之一
  18. HBuilder安装教程
  19. FCPX插件:Stupid Raisins Callout Pop Mac(视频字幕动画)
  20. 医疗器械计算机培训,深度学习,AI医疗器械“学然后知不足”

热门文章

  1. 3000字带你深入理解二叉树(图解剖析)
  2. 收藏几个电脑电子书的网站
  3. 1个工具,4个技巧,教你高效制作各种报表
  4. 测试开发工程师成长日记010 - Jenkins中的CI/CD/CT(持续集成构建/持续交付/持续测试)
  5. 混合云平台打破数据壁垒
  6. HTML头部(head)
  7. 多目标柔性车间调度丨NSGA-II:以算例MK01为例
  8. postMan参数传递
  9. Python OpenCV预览Mac摄像头
  10. 游戏陪练还是不止于陪练“比心陪练”被停业整顿