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

Posted qintangtao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;



以上是关于QPushButton取消按压后文字下沉效果的主要内容,如果未能解决你的问题,请参考以下文章

QToolButton按下时下沉效果怎么实现

[修正] Firemonkey Windows & macOS 平台下 Edit & Memo 中文输入后会取消原选取文字的 BUG

QT软件开发之基础控件--2.1.2 QPushButton按钮

python QPushButton 点击后修改文本不生效问题

python QPushButton 点击后修改文本不生效问题

QT开发——QT按钮组件