2

我试图从paintEvent()中找出是否正在按下按钮,以便我可以绘制“向下”状态。但是,我不知道在哪里可以找到这些信息。我试过 QStyleOptionButton::state 但它不知道按钮是否被点击。调试语句的输出总是类似于 "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);
}

那么知道如何检测按钮是否被点击?

4

1 回答 1

3

QPushButton继承QAbstractButton,它提供down属性

该属性保存按钮是否被按下。

QStyleOption父类的文档包含一个使用此属性的示例

void MyPushButton::paintEvent(QPaintEvent *)
{
    QStyleOptionButton option;
    option.initFrom(this);
    option.state = isDown() ? QStyle::State_Sunken : QStyle::State_Raised;
    //...
}

换句话说,沉没/凸起状态不是由 初始化的initFrom()。这是有道理的,因为initFrom继承自QStyleOption并接受 aQWidget

void initFrom ( const QWidget * widget )

– 并且泛型QWidget没有“凸起”或“凹陷”的概念。

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

于 2011-08-07T08:33:02.917 回答