两个QTableWidget实现复杂表头

使用两个QTableWidget实现复杂表头(可直接运行 )

1、运行界面

在这里插入图片描述

demo.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_demo02.h"

class demo02 : public QWidget
{
	Q_OBJECT

public:
	demo02(QWidget *parent = Q_NULLPTR);
	~demo02();

private slots:
	void onSliderMoved(int);
	
public:
	void initAllTableWidget();
	
private:
	Ui::demo02Class		*ui;
};

demo.cpp

#include "demo02.h"
#include <QStringList>

//----------------------------------------------------------------
demo02::demo02(QWidget *parent)
	: QWidget(parent)
{
	ui = new Ui::demo02Class();
	ui->setupUi(this);
	initAllTableWidget();
}
//----------------------------------------------------------------
demo02::~demo02()
{
}
//----------------------------------------------------------------
void demo02::initAllTableWidget()
{
	ui->table_header->horizontalHeader()->setVisible(false);
	ui->table_header->verticalHeader()->setVisible(false);
	ui->table_header->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	ui->table_header->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	ui->table_header->setFrameShape(QFrame::NoFrame);
	ui->table_header->setFocusPolicy(Qt::NoFocus);
	ui->table_header->setEditTriggers(QAbstractItemView::NoEditTriggers);
	ui->table_header->setSelectionMode(QAbstractItemView::NoSelection);

	ui->table_header->setRowCount(2);
	ui->table_header->setColumnCount(9);
	ui->table_header->setFixedHeight(ui->table_header->rowHeight(0) + ui->table_header->rowHeight(1));

	ui->table_header->setSpan(0, 0, 2, 1);
	ui->table_header->setItem(0, 0, new QTableWidgetItem("Order"));
	ui->table_header->item(0, 0)->setTextAlignment(Qt::AlignCenter);

	ui->table_header->setSpan(0, 1, 1, 2);
	ui->table_header->setItem(0, 1, new QTableWidgetItem("Red"));
	ui->table_header->item(0, 1)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 1, new QTableWidgetItem("x"));
	ui->table_header->item(1, 1)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 2, new QTableWidgetItem("y"));
	ui->table_header->item(1, 2)->setTextAlignment(Qt::AlignCenter);

	ui->table_header->setSpan(0, 3, 1, 2);
	ui->table_header->setItem(0, 3, new QTableWidgetItem("Green"));
	ui->table_header->item(0, 3)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 3, new QTableWidgetItem("x"));
	ui->table_header->item(1, 3)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 4, new QTableWidgetItem("y"));
	ui->table_header->item(1, 4)->setTextAlignment(Qt::AlignCenter);

	ui->table_header->setSpan(0, 5, 1, 2);
	ui->table_header->setItem(0, 5, new QTableWidgetItem("NIR"));
	ui->table_header->item(0, 5)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 5, new QTableWidgetItem("x"));
	ui->table_header->item(1, 5)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 6, new QTableWidgetItem("y"));
	ui->table_header->item(1, 6)->setTextAlignment(Qt::AlignCenter);

	ui->table_header->setSpan(0, 7, 1, 2);
	ui->table_header->setItem(0, 7, new QTableWidgetItem("FIR"));
	ui->table_header->item(0, 7)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 7, new QTableWidgetItem("x"));
	ui->table_header->item(1, 7)->setTextAlignment(Qt::AlignCenter);
	ui->table_header->setItem(1, 8, new QTableWidgetItem("y"));
	ui->table_header->item(1, 8)->setTextAlignment(Qt::AlignCenter);

	ui->table_content->horizontalHeader()->setVisible(false);
	ui->table_content->verticalHeader()->setVisible(false);
	//ui->table_content->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	ui->table_content->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	ui->table_content->setFrameShape(QFrame::NoFrame);
	ui->table_content->setFocusPolicy(Qt::NoFocus);
	ui->table_content->setSelectionBehavior(QAbstractItemView::SelectRows);
	ui->table_content->setSelectionMode(QAbstractItemView::SingleSelection);
	ui->table_content->setAlternatingRowColors(true);
	ui->table_content->setEditTriggers(QAbstractItemView::NoEditTriggers);

	ui->table_content->setColumnCount(9);
	ui->table_content->setRowCount(5);
	
	QStringList list;
	list << "8.8-1" << "8.8-3" << "8.8-5" << "8.8-7" << "8.0-1";
	for (int i = 0; i < 5; i++)
	{
		ui->table_content->setItem(i, 0, new QTableWidgetItem(list[i]));
	}

	//ui->table_header->setHorizontalScrollBar(ui->horizontalScrollBar1);
	**//将界面的QScrollBar添加到内容表格**
	ui->table_content->setHorizontalScrollBar(ui->horizontalScrollBar1);
	connect(ui->horizontalScrollBar1, SIGNAL(valueChanged(int)), this, SLOT(onSliderMoved(int)));
}
//----------------------------------------------------------------
void demo02::onSliderMoved(int pos)
{
	ui->table_header->horizontalScrollBar()->setValue(pos);
}

四、分析

1、布局方面建议直接使用QT designer进行布局
2、难点主要在于使用一个QScrollBar控制两个表格的移动,首先需要禁用表头(ui->table_header)的滚动条,之后将自定义的QScrollBar添加到内容表格(ui->table_content)。进行信号槽链接。由于是用水平滚动条,所以内容表格的水平滚动条不能设为禁止使用。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值