QTableWidget实现多级表头、表头冻结效果

最终效果:
在这里插入图片描述
实现思路:如果只用一个表格的话写起来比较麻烦,可以考虑使用两个QTableWidget组合,把复杂的表头一个用QTableWidget显示,其他内容用另一个QTableWidget。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTableWidget>
#include <QLayout>
#include <QHeaderView>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);resize(1120, 720);QWidget* widget = new QWidget(this);QTableWidget* head = new QTableWidget;QTableWidget* content = new QTableWidget;setCentralWidget(widget);QVBoxLayout* vLayout = new QVBoxLayout(widget);vLayout->setSpacing(0);vLayout->setMargin(0);widget->setLayout(vLayout);head->setFixedHeight(80);head->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);//取消表头head->horizontalHeader()->setVisible(false);head->verticalHeader()->setVisible(false);//取消滚动条head->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);head->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//不接受绘制head->setFrameShape(QFrame::NoFrame);//不接受焦点head->setFocusPolicy(Qt::NoFocus);//不可编辑head->setEditTriggers(QAbstractItemView::NoEditTriggers);//不可选择head->setSelectionMode(QAbstractItemView::NoSelection);head->setRowCount(2);head->setColumnCount(9);head->setSpan(0, 0, 2, 1);head->setItem(0, 0, new QTableWidgetItem(QString("时间")));head->setSpan(0, 1, 1, 2);head->setItem(0, 1, new QTableWidgetItem(QString("管理区1")));head->setItem(1, 1, new QTableWidgetItem(QString("应到")));head->setItem(1, 2, new QTableWidgetItem(QString("实到")));head->setSpan(0, 3, 1, 2);head->setItem(0, 3, new QTableWidgetItem(QString("管理区2")));head->setItem(1, 3, new QTableWidgetItem(QString("应到")));head->setItem(1, 4, new QTableWidgetItem(QString("实到")));head->setSpan(0, 5, 1, 2);head->setItem(0, 5, new QTableWidgetItem(QString("管理区3")));head->setItem(1, 5, new QTableWidgetItem(QString("应到")));head->setItem(1, 6, new QTableWidgetItem(QString("实到")));head->setSpan(0, 7, 1, 2);head->setItem(0, 7, new QTableWidgetItem(QString("管理区4")));head->setItem(1, 7, new QTableWidgetItem(QString("应到")));head->setItem(1, 8, new QTableWidgetItem(QString("实到")));for(int i = 0; i < head->rowCount(); i++){for(int j = 0; j < head->columnCount(); j++){if(!head->item(i, j))continue;head->item(i, j)->setTextAlignment(Qt::AlignCenter);}}head->setRowHeight(0, 40);head->setRowHeight(1, 40);content->horizontalHeader()->setVisible(false);content->verticalHeader()->setVisible(false);content->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);content->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);content->setFrameShape(QFrame::NoFrame);content->setFocusPolicy(Qt::NoFocus);content->setEditTriggers(QAbstractItemView::NoEditTriggers);content->setSelectionMode(QAbstractItemView::NoSelection);content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);content->setRowCount(27);content->setColumnCount(9);content->setItem(0, 0, new QTableWidgetItem(QString("0-1")));content->setItem(1, 0, new QTableWidgetItem(QString("1-2")));content->setItem(2, 0, new QTableWidgetItem(QString("2-3")));content->setItem(3, 0, new QTableWidgetItem(QString("3-4")));content->setItem(4, 0, new QTableWidgetItem(QString("4-5")));content->setItem(5, 0, new QTableWidgetItem(QString("5-6")));content->setItem(6, 0, new QTableWidgetItem(QString("6-7")));content->setItem(7, 0, new QTableWidgetItem(QString("7-8")));content->setItem(8, 0, new QTableWidgetItem(QString("8-9")));content->setItem(9, 0, new QTableWidgetItem(QString("9-10")));content->setItem(10, 0, new QTableWidgetItem(QString("10-11")));content->setItem(11, 0, new QTableWidgetItem(QString("11-12")));content->setItem(12, 0, new QTableWidgetItem(QString("12-13")));content->setItem(13, 0, new QTableWidgetItem(QString("13-14")));content->setItem(14, 0, new QTableWidgetItem(QString("14-15")));content->setItem(15, 0, new QTableWidgetItem(QString("15-16")));content->setItem(16, 0, new QTableWidgetItem(QString("16-17")));content->setItem(17, 0, new QTableWidgetItem(QString("17-18")));content->setItem(18, 0, new QTableWidgetItem(QString("18-19")));content->setItem(19, 0, new QTableWidgetItem(QString("19-20")));content->setItem(20, 0, new QTableWidgetItem(QString("20-21")));content->setItem(21, 0, new QTableWidgetItem(QString("21-22")));content->setItem(22, 0, new QTableWidgetItem(QString("22-23")));content->setItem(23, 0, new QTableWidgetItem(QString("23-24")));content->setItem(24, 0, new QTableWidgetItem(QString("最大值")));content->setItem(25, 0, new QTableWidgetItem(QString("最小值")));content->setItem(26, 0, new QTableWidgetItem(QString("平均值")));for(int i = 0; i < content->rowCount(); i++){for(int j = 0; j < content->columnCount(); j++){if(!content->item(i, j))continue;content->item(i, j)->setTextAlignment(Qt::AlignCenter);}}vLayout->addWidget(head);vLayout->addWidget(content);
}MainWindow::~MainWindow()
{delete ui;
}

此方法写出来的表头自带冻结效果
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年客运从业资格证备考单选练习题

客运从业资格证备考单选练习题 1、从事道路旅客运输活动时&#xff0c;应当采取必要措施保证旅客的人身和财产安全&#xff0c;发生紧急情况时&#xff0c;首先应&#xff08; &#xff09;。 A. 抢救财产 B. 抢救伤员 C. 向公司汇报 答案&#xff1a;B 解析&#xff1a;…

python打卡day21

常见的降维算法 知识点回顾&#xff1a; LDA线性判别PCA主成分分析t-sne降维 之前学了特征降维的两个思路&#xff0c;特征筛选&#xff08;如树模型重要性、方差筛选&#xff09;和特征组合&#xff08;如SVD/PCA&#xff09;。 现在引入特征降维的另一种分类&#xff1a;无/有…

专业级软件卸载工具:免费使用,彻底卸载无残留!

在数字生活节奏日益加快的今天&#xff0c;我们的电脑就像每天都在"吃进"各种软件。但您是否注意到&#xff0c;那些看似消失的程序其实悄悄留下了大量冗余文件&#xff1f;就像厨房角落里积攒的调味瓶空罐&#xff0c;日积月累就会让系统变得"消化不良"。…

【Linux】基础 IO(一)

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux——基础IO主要包括&#xff1a; 文件基本概念回顾 C文件的操作介绍系统关于文件的基本操作 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 …

Java 原生实现代码沙箱之Java 程序安全控制(OJ判题系统第2期)——设计思路、实现步骤、代码实现

在看这一期之前&#xff0c;需要先看上一期的文章&#xff1a; Java 原生实现代码沙箱&#xff08;OJ判题系统第1期&#xff09;——设计思路、实现步骤、代码实现-CSDN博客 Java 程序可能出现的异常情况 1、执行超时 占用时间资源&#xff0c;导致程序卡死&#xff0c;不释…

常见的降维算法

作业&#xff1a; 自由作业&#xff1a;探索下什么时候用到降维&#xff1f;降维的主要应用&#xff1f;或者让ai给你出题&#xff0c;群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。 一、什么时候用到降维&#xff1f; 降维通常…

理解Yocto项目中`${D}`作为模拟目标系统根文件结构的临时目录

在Yocto项目中,理解${D}作为模拟目标系统根文件结构的临时目录,可以通过以下具象化的比喻和结构解析来把握其核心逻辑: 一、沙盒模型:构建系统的“实验场地” ${D}的作用类似于建筑师在施工前搭建的1:1实体模型。它完全模仿目标设备的文件系统布局(如/usr/bin、/etc等目录…

第十课认识约数

课堂学习&#xff1a; 情景引入&#xff1a; 今天我们来认识一下数学中的约数关系&#xff0c;上节课我们了解完倍数之后就已经对约数有了基本的概念&#xff01; 我们按照是否有余数&#xff0c;可以把他们分成两类 在整数除法中&#xff0c;如果商是整数没有余数&#x…

【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用

目录 一、getters 二、 mapState 三、 mapGetters 四、 mapMutations 五、 mapActions 学到这儿来个小总结&#xff1a;四个map方法的使用 总结不易~ 本章节对我有很大的收获&#xff0c; 希望对你也是&#xff01;&#xff01;&#xff01; 本节素材已上传至Gitee&…

html object标签介绍(用于嵌入外部资源通用标签)(已不推荐使用deprecated,建议使用img、video、audio标签)

文章目录 HTML <object> 标签详解基本语法与核心属性关键属性解析1. **data**2. **type**3. **width & height**4. **name** 嵌入不同类型的资源1. **嵌入图像**2. **嵌入音频**3. **嵌入视频**4. **嵌入 PDF** 参数传递与回退内容**参数&#xff08;<param>&a…

警备,TRO风向预警,In-N-Out Burgers维权风暴来袭

本案是TME律所代理的5月首案&#xff0c;传奇连锁快餐品牌In-N-Out Burgers委托维权&#xff01; 案件基本情况&#xff1a; 起诉时间&#xff1a;2025-5-1 案件号&#xff1a;25-cv-04767 品牌&#xff1a;In-N-Out 原告&#xff1a;In-N-Out Burgers 原告律所&#xff…

数据结构算法习题通关:树遍历 / 哈夫曼 / 拓扑 / 哈希 / Dijkstra 全解析

已知一棵二叉树先序遍历和中序遍历分别为 ABDEGCFH 和 DBGEACHF&#xff0c;请画出这个二叉树的逻辑结构并写出后序遍历的序列。 先序遍历&#xff1a;ABDEGCFH 中序遍历&#xff1a;DBGEACHF 先序遍历看出根为A&#xff0c;左子树DBGE&#xff0c;右子树CHF A的左子树 再…

C++GO语言微服务和服务发现

目录 01 03-go-micro简介 02 04-服务发现的简单认识 03 05-consul的安装 04 06-consul常用的命令 05 07-注册服务到consul并验证 06 08-consul健康检查 07 09-consul结合grpc使用-上&#xff08;只实现grpc远程调用&#xff09; 08 10-consul结合grpc使用-中&#xff08…

HDFS 常用基础命令详解——快速上手分布式文件系统

简介&#xff1a; 本文面向刚接触 Hadoop HDFS&#xff08;Hadoop 分布式文件系统&#xff09;的读者&#xff0c;结合 CSDN 博客风格&#xff0c;系统梳理最常用的 HDFS 客户端命令&#xff0c;并配以示例和注意事项&#xff0c;帮助你在开发和运维中快速掌握 HDFS 的文件管理…

VUE CLI - 使用VUE脚手架创建前端项目工程

前言 前端从这里开始&#xff0c;本文将介绍如何使用VUE脚手架创建前端工程项目 1.预准备&#xff08;编辑器和管理器&#xff09; 编辑器&#xff1a;推荐使用Vscode&#xff0c;WebStorm&#xff0c;或者Hbuilder&#xff08;适合刚开始练手使用&#xff09;&#xff0c;个…

make和makefile的使用,以及写一个简单的进度条程序

1.自动化构建-make/makefile 1.1 背景 一个工程文件中的文件不计其数&#xff0c;其按类型、功能、模块放在若干目录中&#xff0c;makefile定义了一系列规则来指定哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff0c;甚至于过呢…

数据结构中的栈与队列:原理、实现与应用

前言&#xff1a;栈和队列是计算机科学中两种最基础的线性数据结构&#xff0c;它们的独特操作规则和广泛的应用场景使其成为每一位开发者必须掌握的核心知识。本文将通过生活案例、代码实现和实际应用场景&#xff0c;带您深入理解这两种数据结构的精髓。 1.栈&#xff08;Sta…

如何选择自己喜欢的cms

选择内容管理系统cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 检测器的情况下手动检测 CMS 结论 在开始构建自己的数字足迹之前&#xff0c;大多数人会…

SDC命令详解:使用all_outputs命令进行查询

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html all_outputs命令用于创建一个输出端口对象集合&#xff0c;关于设计对象和集合的更详细介绍&#xff0c;可以参考下面的博客。 Synopsys&#xff1a;设计对象https://chenzhang.blog.csdn…

vue 中的ref

vue 中的ref vue 中的ref 1. ​​ref​​ ** 的基本作用** 在 Vue 中&#xff0c;ref 是用来获取 DOM 元素或者组件实例的一种方式。对于 <el-form> 组件&#xff0c;通过 ref 可以获取到该表单组件的实例&#xff0c;进而调用表单组件提供的各种方法和访问其属性。 …