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