打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
QT 设立左上角按钮

      QT表格模型没有提供访问左上角按钮的API, 查看qtableview.cpp 发现其中有一个QTableCornerButton的私有类, 既然AP没有暴露出该类, 那我们如何设置左上角按钮的显示方式呢?

 

一. 设置左上角按钮背景色

      既然知道左上角按钮就是QTableCornerButton, 我们就可以通过该类名设置该按钮样式 

 table->setStyleSheet("QTableCornerButton::section{background-color:red;}");

 

二. 设置按钮文本

    虽然没有提供直接的访问方式,可以通过findChild()来定位到该按钮,然后设置其文本及显示宽度.

class TableWidget:public QTableWidget{public:    TableWidget(int rows, int cols, QWidget* parent = 0)        : QTableWidget(rows, cols, parent)    {        QAbstractButton* btn = findChild<QAbstractButton*>();        if (btn)        {            btn->setText("Text");            btn->installEventFilter(this);            // adjust the width of the vertical header to match the preferred corner button width            // (unfortunately QAbstractButton doesn't implement any size hinting functionality)            QStyleOptionHeader opt;            opt.text = btn->text();            QSize s = (btn->style()->sizeFromContents(QStyle::CT_HeaderSection, &opt, QSize(), btn).                       expandedTo(QApplication::globalStrut()));            if (s.isValid())                verticalHeader()->setMinimumWidth(s.width());        }    }    bool 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;    }};

  

    运行效果:

    

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python3+PyQt5编程:如何获取PyQt5中内置的图标并显示?
PyQt5基本控件详解之QPushButton(六)
Qt的风格
Qt QMessageBox用法详解
QT鼠标响应(移动到按钮上按钮有响应)
Qt----学习之路
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服