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

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);
http://www.jsqmd.com/news/298347/

相关文章:

  • 凌晨3点服务器被CPU打爆!从裸奔到铜墙铁壁,这套纵深防御方案救了我的命
  • 打孔吸风皮带推荐制造商,亨冠工业价格贵不贵
  • 养老规划平台哪个口碑好,德生科技的服务推荐吗?
  • 2026铸造钢球实力厂商排名,山东金池靠四大优势脱颖而出
  • 金螳螂家总部店反馈怎么样,听听30000+客户真实评价
  • 探讨黑龙江靠谱的公考培训机构,哪个口碑好值得选择?
  • 2026年热门舞蹈地板厂排名,新凯琳作为推荐品牌靠谱不?
  • YOLOv12官版镜像效果惊艳!复杂场景检测不漏检
  • 2026年四川晾衣架及配套商贸服务商综合评测与选型指南
  • 手把手教学:如何用科哥镜像搭建个人抠图小工具
  • 热词功能实测:提升专业术语识别率的正确姿势
  • 英伟达的汽车生意经
  • 汽车工程师在焦虑中释怀的2025年
  • 吐血推荐8个一键生成论文工具,继续教育学生轻松搞定毕业论文!
  • unbuntu关于apt镜像的注意事项(不能用腾讯源)
  • 低成本实现数字人直播?Live Avatar可行性分析
  • 选购蒸汽锅炉必看:2026年优质制造厂家深度解析,锅炉厂家/导热油锅炉/蒸汽锅炉,蒸汽锅炉制造企业选哪家
  • 用GPEN镜像做了个人像增强项目,附完整步骤
  • 2026 年 AI 搜索 geo 优化公司推荐:头部供应商技术路径与增长效果全解析
  • 聊聊通过式抛丸机公司哪家实惠,江苏鼎坚性价比之选
  • 2026年成都热门烘焙培训学校排名,成都欧米奇西点学校的学费是好多了解下?
  • 盘点广东安全阀在线校验仪品牌商,性价比高的推荐
  • 2026年铸造钢球正规供应商排名,高性能铸造钢球厂家推荐
  • 分享值得推荐的面粉加工设备制造商,选哪家靠谱?
  • 2026年PVC同质透心地板资深厂商排名,你认可吗
  • Win10/Win11防火墙控制软件联网全攻略
  • 计算机毕业设计springboot智慧商城 基于SpringBoot的“慧购”一体化电商运营平台 融合大数据与AI的SpringBoot轻量级智能零售系统
  • 计算机毕业设计springboot老年医疗保健网站的设计与实现 基于 SpringBoot 的银龄健康云服务平台构建与应用 面向智慧养老的 Java 医疗保健信息门户研发
  • 详细介绍:Wi-Fi:可持续的优选连接方案
  • 越南环保油墨市场:2026年值得关注的五家实力供应商盘点