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;




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM