Я внедряю события клавиатуры и мыши, которые передаются по сети, в мое приложение 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
), поэтому я просто использовал его в качестве аргумента получателя для postEvent
.Теперь в моем приложении более одного виджета, и приведенный выше код больше не выполняет то, что я хочу.
Второй полноэкранный виджет отображается в полноэкранном режиме, и я знаю, что все события мыши должны идти в это окно, но сВ приведенном выше коде они все еще направляются в основной виджет.
Как выбрать правильный виджет в качестве получателя (тот, что находится под мышью x, y координат)?Есть ли стандартный способ, чтобы Qt выбирал правильный виджет или я должен отслеживать это сам?
edit
Я сейчас используюследующее, которое отлично работает (Большое спасибо Дасти Кэмпбелл ):
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);
}