Отправка событий мыши в окно QtQuick в сцене OpenGL виртуальной реальности

В настоящее время я работаю над проектом виртуальной реальности, основанным на OpenGL. Поскольку мне также требовалась некоторая форма пользовательского интерфейса, я подумал, что было бы неплохо интегрировать окна QtQuick в сцену. Рисование окна на текстуру работает без проблем (я использовал этот пример) но я изо всех сил пытаюсь отправить события мыши, чтобы мои контроллеры могли взаимодействовать с ним.

Вот небольшой пример видео на YouTube. В этом примере анимация встроенного GIF должна останавливаться при каждом наведении на него курсора. Это работает в обычном приложении QML, но не тогда, когда я вручную отправляю MouseMove событие.
Положение мыши в окне известно (красная линия на видео указывает на пересечение), и в настоящее время я отправляю событие через

QQuickWindow::sendEvent(QQuickItem* item, QEvent*)

где вещь это корень Прямоугольник в источнике qml:

import QtQuick 2.3
import QtQuick.Controls 2.0

Rectangle {
color: mouseArea.containsMouse ? "red" : "white"width: 600
height: 400

MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true

AnimatedImage {
anchors.fill: parent
paused: mouseArea.containsMouse
source: "test.gif"}
}
}

Событие, которое я отправляю каждый раз при обнаружении пересечения между лучом и окном, выполняется с помощью:

QMouseEvent* mouseMoveEvent = new QMouseEvent(
QEvent::MouseMove, // wrong event?
cursorPosition, cursorPosition, // Note: cursorPosition := the calculated cursor coordinates within the window
Qt::MouseButton::NoButton,
Qt::MouseButtons(), // is this right?
Qt::KeyboardModifier::NoModifier);
window->sendEvent(rootItem, mouseMoveEvent); // Note: window is my QQuickWindow, rootItem is the root Rectangle

Я не являюсь экспертом в QML (редко использую его) и был бы признателен, если у кого-то есть предложения о том, как решить эту проблему. Я предполагаю, что я не использую правильные события и не отправляю их правильно.

2

Решение

Я нашел решение сам. Вместо использования QQuickWindow :: sendEvent (..) мне пришлось просто использовать QApplication () :: instance () -> sendEvent (..).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]