• QPushButton取消按压后文字下沉效果


    1、下沉原因

    1.1、QPushButton源码

    void QPushButton::initStyleOption(QStyleOptionButton *option) const
    {
        if (d->down || d->menuOpen)
            option->state |= QStyle::State_Sunken;
        if (d->checked)
            option->state |= QStyle::State_On;
    }
    

      当按下和选中后 

        option->state 会有 QStyle::State_Sunken 或者 QStyle::State_On 标记

    1.2、QCommonStyle 源码

    void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
                                   QPainter *p, const QWidget *widget) const
    {
        Q_D(const QCommonStyle);
        switch (element) {
    case CE_PushButtonLabel:
            if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
    
                if (button->state & (State_On | State_Sunken))
                    textRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt, widget),
                                 proxy()->pixelMetric(PM_ButtonShiftVertical, opt, widget));
    
                proxy()->drawItemText(p, textRect, tf, button->palette, (button->state & State_Enabled),
                             button->text, QPalette::ButtonText);
            }
            break;
        }
    
    }

      当 option->state 含有 QStyle::State_Sunken 或者 QStyle::State_On 标记时 会改变文本位置

    2、解决办法

     2.1、设置样式代理

      proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt, widget)
      proxy()->pixelMetric(PM_ButtonShiftVertical, opt, widget)
      获取偏移时return 0;



  • 相关阅读:
    1.GoldenEye
    centos系统安装问题 dracut-initqueue timeout
    pycharm2019永久激活
    webshell不同马文件分类
    frp内网穿透工具
    永久关闭windows defender
    Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
    python 基础(三)
    bugku-web(头等舱)
    bugku-web(变量1)
  • 原文地址:https://www.cnblogs.com/qintangtao/p/6972620.html
Copyright © 2020-2023  润新知