【发布时间】:2014-11-28 05:27:20
【问题描述】:
Flat QPushButtons 没有鼠标悬停的迹象。有没有办法设置平面按钮悬停状态的样式,使其与普通按钮悬停状态(或类似的东西)的样式相匹配?
如果样式表意味着偏离默认外观或必须从头开始设计按钮样式,我不想使用样式表。
【问题讨论】:
标签: qt hover pyqt qpushbutton qtstylesheets
Flat QPushButtons 没有鼠标悬停的迹象。有没有办法设置平面按钮悬停状态的样式,使其与普通按钮悬停状态(或类似的东西)的样式相匹配?
如果样式表意味着偏离默认外观或必须从头开始设计按钮样式,我不想使用样式表。
【问题讨论】:
标签: qt hover pyqt qpushbutton qtstylesheets
“Qt方式”就是实现自己的QProxyStyle甚至QStyle。与样式表相比,它的效率要高得多。在 Qt 中,样式表会自动转换为对应的 QProxyStyle 对象。
但是实现自己的QStyle 比使用 QSS 更难。
【讨论】:
QSS 实现他的目标。
But implementing your own QStyle is harder, then using QSS
QPushButton 或改用QToolButton。
一种方法是派生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);
}
【讨论】: