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.pswp.cn/bicheng/80491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80491.shtml
英文地址,請注明出處:http://en.pswp.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;進而調用表單組件提供的各種方法和訪問其屬性。 …