Qt 3D窗口上的鼠标控制

Qt 3D窗口上的鼠标控制,qt,qt3d,Qt,Qt3d,我有一个包含Qt3DWindow()的QWidget。我希望能够在Qt3DWindow中,在将鼠标悬停在窗口上的同时,使用鼠标滚轮“放大”Qt3DWindow中的QtEntity 我有工作的功能,但只有当鼠标悬停在Qt3DWindow框架之外时。下面是我初始化窗口和处理鼠标滚轮事件的代码 窗口初始化: mainView = new Qt3DExtras::Qt3DWindow(); mainView->defaultFramegraph()->setClearColor(QColor

我有一个包含Qt3DWindow()的QWidget。我希望能够在Qt3DWindow中,在将鼠标悬停在窗口上的同时,使用鼠标滚轮“放大”Qt3DWindow中的QtEntity

我有工作的功能,但只有当鼠标悬停在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框架上时,覆盖窗口鼠标抓取的技巧是什么


提前感谢您的帮助。

我建议使用事件过滤器拦截Qt3DWindow事件。您的ModelView类可以在Qt3DWindow上安装自身作为事件过滤器,检测控制盘事件,自行处理它们,并返回true以指示它们已被处理。对于所有其他事件,返回false,Qt3DWindow将正常接收并处理它们


查看文档中的QObject::installEventfilter和QObject::eventFilter方法。

不客气……很高兴这是适合您的解决方案。我这里有一个类似的问题(),您能帮我吗?