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

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;
}

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

相关文章:

  • 模型 启动效应
  • WPF之集合绑定深入
  • 配置高级相关
  • 深入理解卷积神经网络的输入层:数据的起点与预处理核心
  • SpringBoot项目容器化进行部署,meven的docker插件远程构建docker镜像
  • [杂谈随感-13]: 人的睡眠,如何布置床的位置比较有安全?感?
  • java命令行打包class为jar并运行
  • 基于人工智能的个性化 MySQL 学习路径推荐研究
  • Linux——Mysql索引和事务
  • 基于FPGA的PID控制器verilog实现,包含simulink对比模型
  • ffmpeg 写入avpacket时候,即av_interleaved_write_frame方法是如何不需要 业务层释放avpacket的 逻辑分析
  • 2003-2020年高铁线路信息数据
  • 第七章 数据库编程
  • 机器学习第四讲:无监督学习 → 给无标签积木自由组合,发现隐藏规律
  • redis sentinel和redis cluster的主从切换选举过程
  • 77.评论日记
  • Unity基础学习(十)Camera组件
  • 【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用
  • milvus+flask山寨复刻《从零构建向量数据库》第7章
  • 常见的降维算法
  • 湖南省职业病防治院通报3岁女童确诊“铊中毒”:去年病例,编辑误写为“近日”
  • 前4个月我国货物贸易进出口同比增长2.4%,增速较一季度加快1.1个百分点
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长
  • 上海发布预付卡消费“10点提示”:警惕“甩锅闭店”套路
  • 紧盯大V、网红带货肉制品,整治制售假劣肉制品专项行动开展
  • “子宫内膜异位症”相关论文男性患者样本超六成?福建省人民医院发布情况说明