更改扁平QPushButton悬停状态的样式(不使用样式表)

时间:2014-10-03 06:18:11

标签: qt hover pyqt qpushbutton qtstylesheets

Flat QPushButtons没有鼠标悬停的迹象。有没有办法为平面按钮悬停状态设置样式,以便它匹配正常按钮悬停状态(或类似的东西)的样式?

QPushButton types

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

2 个答案:

答案 0 :(得分:5)

执行此操作的一种方法是派生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);
}

答案 1 :(得分:1)

“Qt way”是实现您自己的QProxyStyle甚至是QStyle。与样式表相比,它更有效。在Qt内部,样式表会自动转换为相应的QProxyStyle个对象。

但是实现自己的QStyle更难,然后使用QSS。