鼠标控制 Qt 3D Window
Mouse controls over Qt 3D Window
我有一个包含 Qt3DWindow() 的 QWidget。我希望能够 "zoom" 在 Qt3DWindow 内的 QtEntity 上进出,使用鼠标滚轮,同时将鼠标悬停在 window.
上
我可以使用该功能,但仅当将鼠标悬停在 Qt3DWindow 框架之外时。这是我初始化 window 和处理鼠标滚轮事件的代码。
Window初始化:
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 框架上时覆盖 window 鼠标抓取的技巧是什么?
在此先感谢您的帮助。
我建议使用事件过滤器来拦截 Qt3DWindow 事件。您的 ModelView class 可以将自身安装为 Qt3DWindow 上的事件过滤器,检测车轮事件,自行处理它们,并且 return true 表示它们已被处理。对于所有其他事件,return false,Qt3DWindow 将正常接收和处理它们。
查看文档中的 QObject::installEventfilter 和 QObject::eventFilter 方法。
我有一个包含 Qt3DWindow() 的 QWidget。我希望能够 "zoom" 在 Qt3DWindow 内的 QtEntity 上进出,使用鼠标滚轮,同时将鼠标悬停在 window.
上我可以使用该功能,但仅当将鼠标悬停在 Qt3DWindow 框架之外时。这是我初始化 window 和处理鼠标滚轮事件的代码。
Window初始化:
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 框架上时覆盖 window 鼠标抓取的技巧是什么?
在此先感谢您的帮助。
我建议使用事件过滤器来拦截 Qt3DWindow 事件。您的 ModelView class 可以将自身安装为 Qt3DWindow 上的事件过滤器,检测车轮事件,自行处理它们,并且 return true 表示它们已被处理。对于所有其他事件,return false,Qt3DWindow 将正常接收和处理它们。
查看文档中的 QObject::installEventfilter 和 QObject::eventFilter 方法。