2016-04-18 3 views
5

私はmyWidgetの中心にwidgetを持っていて、mousePressEvent()myWidgetに使って、マウスのプレスイベントを捕まえました。マウスプレスでmyWidgetを非表示にしたいのですが、widgetの内部を押さないでください。 プレス位置をevent->windowPos()で計算すると、QPointF、さらにui->widget->rect()となり、QRectとなります。QPointFがQRectに含まれているかどうかを確認する方法は?

QpointFQRectの内部にあるかどうかを確認するにはどうすればよいですか?

+1

は、彼らがすでに同じ座標系にありますか?その後、http://doc.qt.io/qt-5/qrectf.html#contains(数学は本当に些細なものでもありますが)。 –

+0

申し訳ありませんが、rectは同じ座標系にありません –

+2

マウスポインタの位置をウィジェットの矩形と比較しないでください。代わりにウィジェットの[geometry](http://doc.qt.io/qt-5/qwidget.html#geometry-prop)と比較してください。また、 'event-> windowPos()'の代わりに 'event-> pos()'を使わなければならないと思います。 – thuga

答えて

1

もう1つの簡単な方法で、イベントがウィジェットで発生したかどうかを調べることができました。

if (ui->widget->underMouse()) doSomething();

0

私は、あなたが方法Widget::mousePressEvent(QMouseEvent* event)をオーバーライドし、event->accept()内部を呼び出すことができますね。 これを行うと、マウスのプレスイベントを消費し、親にmyWidgetを伝播しません。したがって、myWidgetは、ウィジェットジオメトリの外で発生するイベントを取得します。使用さ

+0

に送ってください。私は 'myWidget'の動的宣言のためにそれを無効にできますか? –

+1

次に、 'Widget :: childrenPressEvent()'の中で 'Widget :: childrenRegion()'関数を使い、 'QRegion :: contains(QPoint)'でイベントの位置を調べることができます。私はそれが助けて欲しい – paceholder

+0

nice。私はそれを試してみます –

3

if (ui->widget->geometry().contains(event->pos())) return; 
+1

より良い返答をするために、私は読むことをお勧めします:[良い答えを書くにはどうすればいいですか?](https://stackoverflow.com/help/how-to-answer) – eyllanesc

関連する問題