news 2026/7/16 3:57:15

QHeaderView表头和QTablView+QSS的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QHeaderView表头和QTablView+QSS的应用

一、QHeaderView

在看QTableView之前,先看看QHeaderView

由于表头分水平和垂直方向,只是方向上的不同而已,文中的示例都将使用水平方向的表头。

函数功能

1.hideSection

隐藏一列内容

2.showSection

显示一列内容,和上面的正好凑一对。
看个示例:

3.moveSection

移动某列到指定位置,移动时可能会让后面的列的下边发生变化。

4.swapSections

指定的两列交换,只是交换指定的两列,其它列不受影响。
看个示例:

5.saveState

保存表头当前状态,就像拍了个快照一样,用来恢复

6.restoreState

恢复表头状态,和saveState凑一对。
看个示例:

恢复是有个问题要注意下,表格可能没有跟着一并刷新,所以主动更新视图更好

horizontalHeader_->restoreState(data_); ui->tableView->viewport()->update();
7.setSectionResizeMode

设置重设大小模式,模式包含四个:

QHeaderView::Interactive //可由鼠标任意拖拉,默认模式 QHeaderView::Fixed //固定大小,鼠标拖拽失灵 QHeaderView::Stretch //自动拉伸 QHeaderView::ResizeToContents //适配实际的内容大小

这个函数还有个重载,可为列指定不同的模式

setSectionResizeMode(int logicalIndex, QHeaderView::ResizeMode mode)
8.setSectionsMovable

允许自由拖拽列移动位置

9.setFirstSectionMovable

单独指定第一列是否允许移动,假如我们把第一列做复选框来用,一般是不允许它能随便换位置的,所以这个功能就能解决这个问题。
看个示例:

10.setCascadingSectionResizes

设置层叠式表头栏,默认情况下某一个表头栏在拖拽大小时,其它栏的大小是不会变化的,这个功能一打开,其它栏的大小也会受影响。
看个示例:

11.setHighlightSections

设置标题栏高亮,其实指得是当表格中的某个数据项被选中时,对应列的表头栏是否高亮。在设置QSS样式时,它有时候多少会有点干扰,可以把它关掉。
看个示例:

12.setResizeContentsPrecision

设置精度,指的是当模式为ResizeToContents时,表头计算列宽时需要参考的表数据行数量,默认是1000个。当然越大肯定越准,但效率也下降。
看个示例:

13.setStretchLastSection

设置自动拉伸最后一列,目的是为了能填充整个表格,使用率比较频繁所以官方提供了这么个快捷功能。

14.setSortIndicatorShown

显示排序指示器

15.setSortIndicator

单独指定某一列的排序指示器

16.setOffset

设置表头栏偏移,看了示例更明显

二、QTablView+QSS

QTableView也叫表格视图,QListView没有QHeaderView,但是它有,而且还是俩个:一个行头一个列头。

QHeaderView 子控件

::section

用来表示每项,包含的伪状态都有:

:middle :first :last :only-one :next-selected :previous-selected :selected :checked
::up-arrow

上箭头

::down-arrow

下箭头
看个示例更清晰:

QHeaderView::up-arrow{ background: red; min-width: 20px; min-height: 20px; } QHeaderView::down-arrow{ background: green; min-width: 20px; min-height: 20px; }

QTableView 子控件

::item

表示表格中的每项,伪状态也没啥特殊的,都是比较常见的那些。

QTableCornerButton::section

表格的全选按钮,相貌平平,一直呆在左上角默默无闻。

QTableView QTableCornerButton::section{ background: blue; }

QTableView 特殊属性

selection-color

熟悉吧,前面的QListView刚刚介绍过,被选中时的前景色

selection-background-color

也熟悉吧,被选中时的背景色

alternate-background-color

还熟悉吧,隔行背景色

gridline-color

网格线颜色

QTableView{ gridline-color: yellow; }

简单样式示例

/* 表格 */ QTableView { background-color: white; alternate-background-color: #fafafa; selection-background-color: #e3f2fd; selection-color: #1976d2; border: none; font-family: "Microsoft YaHei"; font-size: 13px; outline: none; } QTableView::item { border-bottom: 1px solid #f0f0f0; } QTableView::item:selected { background-color: #e3f2fd; color: #1976d2; font-weight: bold; } QTableView::item:hover:!selected { background-color: #f5f5f5; } /* 表头 */ QHeaderView::section { background-color: white; color: #333; border: none; border-bottom: 2px solid #e0e0e0; font-weight: bold; font-size: 14px; } QHeaderView::section:hover { background-color: #f8f9fc; }

当然cpp代码中还要补充些设置:
1、隐藏垂直表头
2、隐藏网格线
3、开启隔行颜色属性
4、选择模式换成单选和选择行
5、最后一列自动拉伸

//测试数据 QStandardItemModel *model = new QStandardItemModel; model->setHorizontalHeaderLabels({"姓名", "年龄", "城市", "居住地址"}); QList<QStringList> data = { {"张三", "28", "北京", "朝阳区建国门外大街88号SOHO现代城A座1502室"}, {"李四", "35", "上海", "浦东新区世纪大道100号环球金融中心28层"}, {"王五", "22", "广州", "天河区珠江新城华夏路10号富力中心1203室"}, {"赵六", "41", "深圳", "南山区粤海街道科技园科苑路15号"}, {"孙七", "33", "成都", "锦江区春熙路太古里商圈红星路三段16号"} }; for (int row = 0; row < data.size(); ++row) { for (int col = 0; col < data[row].size(); ++col) { QStandardItem *item = new QStandardItem(data[row][col]); item->setTextAlignment(col == 3 ? Qt::AlignLeft | Qt::AlignVCenter: Qt::AlignCenter); model->setItem(row, col, item); } } //测试表格视图 //ui->tableView->setModel(model); //简单样式 ui->tableView_2->setModel(model); ui->tableView_2->verticalHeader()->hide(); ui->tableView_2->setShowGrid(false); ui->tableView_2->setAlternatingRowColors(true); ui->tableView_2->setSelectionMode(QAbstractItemView::SingleSelection); ui->tableView_2->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableView_2->horizontalHeader()->setStretchLastSection(true);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 23:47:40

一看就会:verl框架下数据格式转换实操演示

一看就会&#xff1a;verl框架下数据格式转换实操演示 在强化学习驱动的大模型后训练实践中&#xff0c;数据不是拿来就能用的——它必须严格符合框架定义的结构、字段和序列组织逻辑。verl作为专为LLM后训练设计的生产级RL框架&#xff0c;对输入数据有明确且不可妥协的格式要…

作者头像 李华
网站建设 2026/7/15 11:26:25

Win10/Win11防火墙控制软件联网全攻略

微软电脑&#xff08;Windows 10/11&#xff09;控制软件联网&#xff0c;优先用系统自带防火墙&#xff08;免费、无额外安装&#xff09;&#xff0c;进阶可用第三方工具简化操作&#xff0c;以下是完整步骤与推荐方案一、系统自带&#xff1a;Windows Defender 防火墙&#…

作者头像 李华
网站建设 2026/7/15 8:03:36

计算机毕业设计springboot老年医疗保健网站的设计与实现 基于 SpringBoot 的银龄健康云服务平台构建与应用 面向智慧养老的 Java 医疗保健信息门户研发

计算机毕业设计springboot老年医疗保健网站的设计与实现qtbj9zq3 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 我国 60 岁以上人口已超 2.8 亿&#xff0c;慢性病共病、多重用…

作者头像 李华
网站建设 2026/7/15 1:05:21

PHP源码解析:CKEDITOR图片自动上传插件如何实现?

企业网站后台Word/公众号内容导入功能集成项目报告 一、需求分析与技术调研 我作为项目负责人&#xff0c;近期针对企业网站后台管理系统新增的Word粘贴、Word文档导入及微信公众号内容粘贴功能需求展开了全面调研。经过详细分析&#xff0c;总结了以下关键需求点&#xff1a…

作者头像 李华
网站建设 2026/7/13 12:06:46

全网最全专科生必备AI论文软件TOP10测评

全网最全专科生必备AI论文软件TOP10测评 2026年专科生必备AI论文软件测评维度解析 随着AI技术在学术领域的不断渗透&#xff0c;越来越多的专科生开始依赖AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的论文辅助软件&#xff0c;如何选择真正适合自己的工具成为…

作者头像 李华
网站建设 2026/7/15 6:05:19

小红书MySQL内核秒杀能力重磅再升级

“秒杀”是电商平台最典型的高并发促销场景&#xff0c;双十一等大促活动也常以秒杀能力作为数据库技术实力的标志。随着小红书电商业务快速增长&#xff0c;直播带货等爆品场景对极致下单速度的需求更加突出&#xff0c;希望将下单吞吐提升至 1W/s。 基于 MySQL 内核实现的合并…

作者头像 李华