我试图从paintEvent()中找出是否按下按钮,以便我可以绘制“向下”状态。但是,我不知道在哪里可以找到这些信息。我尝试了QStyleOptionButton :: state但它没有告诉按钮是否被点击。 debug语句的输出总是类似于“QStyle :: State(”Active | Enabled | HasFocus | MouseOver“)”,所以没有关于MouseDown状态。
void XQPushButton::mousePressEvent(QMouseEvent* event) {
QPushButton::mousePressEvent(event);
QStyleOptionButton options;
options.initFrom(this);
qDebug() << (options.state);
}
void XQPushButton::paintEvent(QPaintEvent* event) {
QPushButton::paintEvent(event);
QStyleOptionButton options;
options.initFrom(this);
qDebug() << (options.state);
}
所以我知道如何检测按钮是否被点击?
答案 0 :(得分:3)
QPushButton
继承QAbstractButton
,提供the down
property:
此属性保持按下按钮。
QStyleOption
父类的文档包含an example that uses this property:
void MyPushButton::paintEvent(QPaintEvent *)
{
QStyleOptionButton option;
option.initFrom(this);
option.state = isDown() ? QStyle::State_Sunken : QStyle::State_Raised;
//...
}
换句话说,initFrom()
未初始化沉没/抬起状态。这是有道理的,因为initFrom
是inherited from QStyleOption
and takes a QWidget
:
void initFrom ( const QWidget * widget )
- 通用QWidget
没有“凸起”或“沉没”的概念。
至少这是我阅读文档的方式。