一、效果图
图中高亮部分即为CornerWidget
二、头文件及实现
#include <QHeaderView>
#include <QTableView>
#include <QStandardItemModel>
class CustomerStandardModel : public QStandardItemModel{
Q_OBJECT
public:
explicit CustomerStandardModel(QObject* parent = nullptr);
CustomerStandardModel(int rows, int columns, QObject *parent = Q_NULLPTR);
~CustomerStandardModel(){
}
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
};
class QPushButton;
class CustomerPrivacyTableVeiw : public QTableView
{
Q_OBJECT
Q_DECLARE_PRIVATE(QTableView)
public:
explicit CustomerPrivacyTableVeiw(QWidget *parent = nullptr , const QString cornerText = "");
virtual ~CustomerPrivacyTableVeiw();
void setHierarchicalHeader(QHeaderView* header ,Qt::Orientation direction);
void setCornerText(const QString text);
private:
QHeaderView* m_veticalHeader;
QHeaderView* m_horizontalHeader;
QPushButton* m_cornerButton;
signals:
};
#include "CustomerPrivacyTableVeiw.h"
#include <QPushButton>
#include <private/qtableview_p.h>
CustomerPrivacyTableVeiw::CustomerPrivacyTableVeiw(QWidget *parent ,const QString cornerText) : QTableView(parent),
m_veticalHeader(nullptr) , m_horizontalHeader(nullptr)
{
m_cornerButton = new QPushButton(cornerText,this);
Q_D(QTableView);
disconnect(d->cornerWidget, SIGNAL(clicked()), this, SLOT(selectAll()));
delete (d->cornerWidget);
m_cornerButton->setObjectName("LabelCorner");
d->cornerWidget = m_cornerButton;
setSelectionMode(QAbstractItemView::SingleSelection);
setObjectName("viewPropotion");
}
CustomerPrivacyTableVeiw::~CustomerPrivacyTableVeiw()
{
delete m_cornerButton;
}
void CustomerPrivacyTableVeiw::setHierarchicalHeader(QHeaderView *header, Qt::Orientation direction)
{
if(Qt::Horizontal == direction){
m_veticalHeader = header;
setHorizontalHeader(header);
header->setSectionResizeMode(QHeaderView::Stretch);
}
else{
m_horizontalHeader = header;
setVerticalHeader(header);
}
// header->setParent(this);
header->setObjectName(Qt::Horizontal == direction ? "PrivacyTableViewHorizontalHeader" : "PrivacyTableViewVerticalHeader");
}
void CustomerPrivacyTableVeiw::setCornerText(const QString text)
{
m_cornerButton->setText(text);
}
CustomerStandardModel::CustomerStandardModel(QObject *parent): QStandardItemModel(parent){
}
CustomerStandardModel::CustomerStandardModel(int rows, int columns, QObject *parent):
QStandardItemModel(rows ,columns ,parent)
{
}
QVariant CustomerStandardModel::headerData(int section, Qt::Orientation orientation, int role) const{
if(Qt::Vertical == orientation)
switch (role) {
case Qt::SizeHintRole:
return QSize(80 ,80);
case Qt::TextAlignmentRole:
return Qt::AlignCenter;
}
return QStandardItemModel::headerData(section , orientation ,role );
}
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
QApplication a(argc, argv);
auto view = new CustomerPrivacyTableVeiw;
auto model = new CustomerStandardModel();
model->setColumnCount(5);
for(int i = 0 ; i < 5 ; i ++)
model->appendRow(new QStandardItem(QString::number(i)));
view->setModel(model);
view->setCornerText("序号");
view->show();
return a.exec();
}