检测是否单击了QPushButton

时间:2011-08-07 07:58:21

标签: qt events user-interface click qwidget

我试图从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);
}

所以我知道如何检测按钮是否被点击?

1 个答案:

答案 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()未初始化沉没/抬起状态。这是有道理的,因为initFrominherited from QStyleOption and takes a QWidget

void initFrom ( const QWidget * widget )

- 通用QWidget没有“凸起”或“沉没”的概念。

至少这是我阅读文档的方式。