ネットワーク経由でQtアプリケーションにキーボードイベントとマウスイベントを注入し、このためにQCoreApplication::postEvent
を使用しています。マウス座標は絶対スクリーンピクセル座標です。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
によって参照)一つだけのウィジェットを持っていたので、私は単純にpostEvent
のための受信機の引数として1ということを使用しました。今では、私のアプリケーションに複数のウィジェットがあり、上記のコードは私がもう必要としていることをしません。
2番目のウィジェットはフルスクリーンモードで表示されていますが、すべてのマウスイベントはこのウィンドウに移動する必要がありますが、上記のコードではメインウィジェットに引き続きルーティングされています。
受信者(マウスx、y座標の下にあるもの)として正しいウィジェットを選択するにはどうすればよいですか? Qtが正しいウィジェットを選ぶか、自分でこれを追跡しなければならないように、標準的な方法はありますか?
私は今、正常に動作し、次の(Dusty Campbellに感謝を)使用編集
:
QPoint pos(x, y);
QWidget *receiver = QApplication::widgetAt(pos);
if (receiver) {
QMouseEvent *event = new QMouseEvent(type, receiver->mapFromGlobal(pos), mouse_button,
mouse_buttons, Qt::NoModifier);
QCoreApplication::postEvent(receiver, event);
}
ありがとう、私はあなたのヒントを使用して動作するようになった。座標が正しいためには、receiver-> mapFromGlobal(pos)を使用しなければなりませんでした。 – trenki