QPushButton取消按壓後文字下沈效果
阿新 • • 發佈:2017-06-09
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<constQStyleOptionButton *>(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取消按壓後文字下沈效果