Управление мышью над 3D-окном Qt
У меня есть QWidget, содержащий Qt3DWindow(). Я хотел бы иметь возможность "увеличивать" и уменьшать масштаб QtEntity внутри Qt3DWindow, используя колесо прокрутки мыши при наведении курсора на окно.
У меня работает функционал, но только при наведении мышки за пределы рамки Qt3DWindow. Вот мой код для инициализации окна и обработки событий колесика мыши.
Инициализация окна:
mainView = new Qt3DExtras::Qt3DWindow();
mainView->defaultFramegraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
QWidget *container = QWidget::createWindowContainer(mainView);
Обработка событий колеса:
void ModelView::wheelEvent(QWheelEvent *event){
QVector3D vec;
vec = cameraEntity->position() - modifier->m_transform->translation();
vec = vec.normalized();
QPoint delta = event->angleDelta();
int zoom_distance = delta.y()*0.01;
vec = cameraEntity->position() - zoom_distance*vec;
cameraEntity->setPosition(vec);
}
В чем заключается хитрость переопределения захвата мыши в окне при наведении курсора на рамку Qt3DWindow?
Заранее благодарю за любую помощь.
1 ответ
Я бы рекомендовал использовать фильтр событий для перехвата событий Qt3DWindow. Ваш класс ModelView может установить себя как фильтр событий в Qt3DWindow, обнаруживать события колеса, обрабатывать их сам и возвращать true, чтобы указать, что они обработаны. Для всех других событий верните false, и Qt3DWindow получит и обработает их в обычном режиме.
Посмотрите методы QObject::installEventfilter и QObject::eventFilter в документации.