最終效果:
實現思路:如果只用一個表格的話寫起來比較麻煩,可以考慮使用兩個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;
}
此方法寫出來的表頭自帶凍結效果