仮想キーボードを作成する必要があります。ボタン押下中にイベントキャッチがありません[QT]
私はQPushButton
を作成しましたが、1つをクリックして別のものをリリースすると、他のボタンはマウスイベントを受け取りません。
私はenterEvent(QEvent *)
とleaveEvent(QEvent *)
を上書きしますが、別のボタンをクリックしたときには成功しません。
誰かがアイデアを得ましたか? QAbstractButtonコードで
仮想キーボードを作成する必要があります。ボタン押下中にイベントキャッチがありません[QT]
私はQPushButton
を作成しましたが、1つをクリックして別のものをリリースすると、他のボタンはマウスイベントを受け取りません。
私はenterEvent(QEvent *)
とleaveEvent(QEvent *)
を上書きしますが、別のボタンをクリックしたときには成功しません。
誰かがアイデアを得ましたか? QAbstractButtonコードで
:mousePressEventトリガ場合
void QAbstractButton::mousePressEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
if (e->button() != Qt::LeftButton) {
e->ignore();
return;
}
if (hitButton(e->pos())) {
setDown(true);
d->pressed = true;
repaint(); //flush paint event before invoking potentially expensive operation
QApplication::flush();
d->emitPressed();
e->accept();
} else {
e->ignore();
}
}
、QAbstractButtonはsetDown(true)
を呼び出し、QAbstractButtonPrivate(Q_D(QAbstractButton)
)はd->emitPressed()
を呼び出します。その後、他のボタンはイベントを受信せず、すでにアクティブなボタンで処理されます。また、状態d->down
をチェックmouseReleaseEvent
void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
d->pressed = false;
if (e->button() != Qt::LeftButton) {
e->ignore();
return;
}
if (!d->down) {
// refresh is required by QMacStyle to resume the default button animation
d->refresh();
e->ignore();
return;
}
if (hitButton(e->pos())) {
d->repeatTimer.stop();
d->click();
e->accept();
} else {
setDown(false);
e->ignore();
}
}
に
あなたは見ることができます。マウスがそのボタンを押すと、d->click();
emitクリックイベントが呼び出されます。マウスがボタンを押していない場合は、setDown(false);
を呼び出して状態をリセットします。
マウスイベントをより簡単に処理できるようにQWidgetから仮想ボタンを継承することをお勧めします。