Определить, нажимается ли кнопка QPushButton - PullRequest
2 голосов
/ 07 августа 2011

Я пытаюсь выяснить, нажата ли кнопка изнутри 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);
}

Так есть идеи, как я могу определить, нажата ли кнопка?

1 Ответ

3 голосов
/ 07 августа 2011

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 и занимает QWidget:

void initFrom ( const QWidget * widget )

& Ndash; и родовой QWidget не имеет понятия «поднятый» или «затонувший».

По крайней мере, так я читаю документы.

...