QT QTableView表格左上角样式

xiaoxiao2021-02-28  130

在设置完QTableView的表头样式后,发现表格左上角是一片空白,如下图:

我们希望左上角的区域也是和表头的颜色一致,可以设置此处样式:

/*QTableView 左上角样式*/ QTableView QTableCornerButton::section { color: white;/*文字颜色*/ background-color: rgb(41, 139, 201);/*背景色*/ border: 5px solid #418bc9;/*边框*/ border-radius:0px;/*边框圆角*/ border-color: rgb(41, 139, 201);/*边框颜色*/ font: bold 11pt;/*字体大小*/ padding:12px 0 0 10px;/*内边距*/ }

效果:

我们还想在左上角位置添加文字为“序号”,效果图如下:

实现代码:

QAbstractButton*btn = tableView->findChild<QAbstractButton*>(); if (btn) { btn->setText(QStringLiteral("序号")); btn->installEventFilter(this);/*注册事件 CPersonMng::eventFilter*/ QStyleOptionHeader opt; opt.text = btn->text(); QSize s = (btn->style()->sizeFromContents(QStyle::CT_HeaderSection, &opt, QSize(), btn).expandedTo(QApplication::globalStrut())); if (s.isValid()) tableView->verticalHeader()->setMinimumWidth(s.width()); } bool CPersonMng::eventFilter(QObject* o, QEvent* e) { if (e->type() == QEvent::Paint) { QAbstractButton* btn = qobject_cast<QAbstractButton*>(o); if (btn) { // paint by hand (borrowed from QTableCornerButton) QStyleOptionHeader opt; opt.init(btn); QStyle::State state = QStyle::State_None; if (btn->isEnabled()) state |= QStyle::State_Enabled; if (btn->isActiveWindow()) state |= QStyle::State_Active; if (btn->isDown()) state |= QStyle::State_Sunken; opt.state = state; opt.rect = btn->rect(); opt.text = btn->text(); // this line is the only difference to QTableCornerButton opt.position = QStyleOptionHeader::OnlyOneSection; QStylePainter painter(btn); painter.drawControl(QStyle::CE_Header, opt); return true; // eat event } } return false; }
转载请注明原文地址: https://www.6miu.com/read-54512.html

最新回复(0)