0

親ウィジェットは、モーダル QDialog が閉じられた後の最初のマウス クリックに応答しません。QDialog は、mousemoveevent() で done() を呼び出すことによって閉じられます。これにより、ダイアログが閉じられた後もマウス ボタンが押されたままになり、2 回目以降のクリックが機能します。普段通り。

これまでの私の発見:

  1. done(int)で呼び出された場合MouseReleaseeEvent()、すべてが期待どおりに機能します

  2. で既に閉じられているためQDialog、イベントが不足しているようですMouseButtonRelease(イベントが発生した後に予想されます) 。これにより、親ウィジェットのマウス イベントが台無しになります。MouseButtonPressQDialogMouseMoveEvent

私の意図は、QDialogマウスが押されて特定の位置に移動したことを検出すると、スライドして閉じることができる a を作成することです。

以前に遭遇した人、または何が起こっているのかについて何か知っている人は、アドバイスをいただければ幸いです。

どうもありがとう。

また、ここに質問を投稿するのはこれが初めてです。提供すると思われる情報を見逃していた場合はお知らせください...

4

1 に答える 1

0

これはアニメーションなしで完全に機能しますが、アニメーションを追加できます。基本的には、マウスが動き始めたときの x 座標の違いを探します。2 より大きいか小さい場合 (左または右にスライド)、ダイアログを閉じます。

int x;

void MyDialog::mousePressEvent(QMouseEvent * event) {
    x = event->globalPos().x();
}

void MyDialog::mouseReleaseEvent(QMouseEvent * event) {
    int diff = x - event->globalPos().x();
    qDebug(tr("released").arg(diff).toUtf8().constData());
    if (diff > 2 || diff < -2) QDialog::close();
}

問題はありません。

于 2012-10-22T08:43:20.057 に答える