Название: [РЕШЕНО] Отправка событий мыши в QQuickWindow (залипание) Отправлено: NoIdea от Октябрь 09, 2018, 22:56 Здравствуйте, есть задача, надо отправить сообщения мыши в QtQuick интерфейс - эмуляция мыши (нажатия, перемещения).
Но сообщения, почему-то приходят лишь в один (текущий) QML-элемент (QQuickItem). Казалось бы ничего сложного: Код
engine.rootObjects().at(0) - это окно QQuickWindow. Всё это работает в простой реализации, НО не работает на сложных интерфейсах, где много элементов визуальных и не визуальных + 3D графика (Qt3D.Scene3D). Точнее работает, но сообщения приходят лишь в один элемент. Если кликнуть мышью на другой элемент, то сообщения будут уже приходить только ему. А ещё более странное, то что если перед отправкой сообщения сделать окно не активным, а прямо перед отправкой снова сделать активным, то сообщения мыши приходят как положено! Кто-нибудь с таким сталкивался? Что делает чудотворное requestActivate()? https://code.woboq.org/qt5/qtbase/src/gui/kernel/qwindow.cpp.html#_ZN7QWindow15requestActivateEv К сожалению вызывать его постоянно не получится, внутри есть проверка на текущую активность окна, а постоянно деактивировать текущее окно - это уже не костыль, а костылище :) Название: Re: [РЕШЕНО] Отправка событий мыши в QQuickWindow (залипан Отправлено: NoIdea от Октябрь 10, 2018, 19:35 ВЕРНОЕ РЕШЕНИЕ: QMouseEvent mouseEvent(type, pos, pos, button, Qt::NoButton, Qt::NoModifier); Ранее... Код
Синтезированные события были идентичны с реальной мышью, но на перетаскиваемом элементе после синтезированного события MouseButtonRelease, заметил, что если пошевелить мышью, то элемент продолжал перетаскиватся (не отпускался) т.е. получается, что не каждое событие MouseButtonRelease одинаково полезно ;) Остальные элементы, похоже, тоже захватывают мышь и не отпускают по синтезированным сообщениям. Пути QtQuick неисповедимы... Вероятно, что-то делаю не так?... |