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を提供する inherits :down

このプロパティは、ボタンが押されているかどうかを保持します。

QStyleOption親クラスのドキュメントには、このプロパティを使用する例が含まれています:

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

つまり、沈没状態は によって初期化されませんinitFrom()から継承され、次の値を取るため、これにはある程度の意味initFromがあります。QStyleOptionQWidget

void initFrom ( const QWidget * widget )

– そして、ジェネリックQWidgetには「隆起」または「沈没」の概念がありません。

少なくとも、これは私がドキュメントを読む方法です。

于 2011-08-07T08:33:02.917 に答える