9

ネットワーク経由で届くキーボードとマウスのイベントをQtアプリケーションに注入し、QCoreApplication::postEventこれに使用しています。マウス座標は絶対スクリーン ピクセル座標です。

QMouseEvent *event = new QMouseEvent(type, QPoint(x, y), mouse_button, mouse_buttons,
    Qt::NoModifier);
QCoreApplication::postEvent(g_qtdraw.main.widget, event);

最初はウィジェット ( で参照g_qtdraw.main.widget) が 1 つしかなかったので、単純にそのウィジェットを の受信側引数として使用しましたpostEvent。現在、私のアプリケーションには複数のウィジェットがあり、上記のコードは私が望んでいることを実行しません。

2 番目のウィジェットがフルスクリーン モードで表示され、すべてのマウス イベントがこのウィンドウに移動する必要があることはわかっていますが、上記のコードでは引き続きメイン ウィジェットにルーティングされます。

正しいウィジェットをレシーバー (マウスの x、y 座標の下にあるもの) として選択するにはどうすればよいですか? Qtが適切なウィジェットを選択する標準的な方法はありますか、それとも自分で追跡する必要がありますか?

4

3 に答える 3

11

QApplication::widgetAt()その位置で正しいウィジェットを見つけて、それに投稿するために使用できますか?

QPoint pos(x, y);
QMouseEvent *event = new QMouseEvent(type, pos, mouse_button, mouse_buttons,  Qt::NoModifier);
QWidget *receiver = QApplication::widgetAt(pos);
QCoreApplication::postEvent(receiver, event);

ただし、重要なイベントでこれを行う必要があるとは思いません。フォーカスされたウィジェット ( QApplication::focusWidget()) に送信する必要があります。

残念ながら、私はこれをテストしていません。

于 2012-01-05T08:03:41.843 に答える
3

ドキュメントによると、署名は次のとおりであるため、いくつかのコードを投稿することをお勧めします。

void QCoreApplication::postEvent ( QObject * receiver, QEvent * event ) [static]

引数QObjectとして対応するポインタを与えてみましたか?receiver

編集:QWidget継承することに注意してくださいQObject

于 2012-01-04T22:24:52.180 に答える