【问题标题】:Change styling of flat QPushButton hover state (without using style sheets)更改平面 QPushButton 悬停状态的样式(不使用样式表)
【发布时间】:2014-11-28 05:27:20
【问题描述】:

Flat QPushButtons 没有鼠标悬停的迹象。有没有办法设置平面按钮悬停状态的样式,使其与普通按钮悬停状态(或类似的东西)的样式相匹配?

如果样式表意味着偏离默认外观或必须从头开始设计按钮样式,我不想使用样式表。

【问题讨论】:

    标签: qt hover pyqt qpushbutton qtstylesheets


    【解决方案1】:

    “Qt方式”就是实现自己的QProxyStyle甚至QStyle。与样式表相比,它的效率要高得多。在 Qt 中,样式表会自动转换为对应的 QProxyStyle 对象。

    但是实现自己的QStyle 比使用 QSS 更难。

    【讨论】:

    • 你无法通过 QSS 实现他的目标。
    • @JacobKrieg rly?顺便说一句,我根本不是在谈论 QSS。
    • 真的吗? But implementing your own QStyle is harder, then using QSS
    • @JacobKrieg rly,因为这可以通过 QSS 简单地完成。您需要将鼠标跟踪设置为QPushButton 或改用QToolButton
    【解决方案2】:

    一种方法是派生QPushButton

    pushbutton.h:

    #ifndef PUSHBUTTON_H
    #define PUSHBUTTON_H
    
    #include <QPushButton>
    
    class PushButton : public QPushButton
    {
        Q_OBJECT
    public:
        explicit PushButton(QWidget *parent = 0);
    
    protected:
        bool event(QEvent * event);
    
    };
    
    #endif // PUSHBUTTON_H
    

    pushbutton.cpp:

    #include "pushbutton.h"
    
    #include <QEvent>
    
    PushButton::PushButton(QWidget *parent) :
        QPushButton(parent)
    {
        setFlat(true);
    }
    
    bool PushButton::event(QEvent *event)
    {
        if(event->type() == QEvent::HoverEnter)
        {
            setFlat(false);
        }
    
        if(event->type() == QEvent::HoverLeave)
        {
            setFlat(true);
        }
    
        return QPushButton::event(event);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      相关资源
      最近更新 更多