1. 程式人生 > >QPushButton取消按壓後文字下沈效果

QPushButton取消按壓後文字下沈效果

led cal amp push highlight horizon elm pan col

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;



QPushButton取消按壓後文字下沈效果