鼠标控制 Qt 3D 窗口
Posted
技术标签:
【中文标题】鼠标控制 Qt 3D 窗口【英文标题】:Mouse controls over Qt 3D Window 【发布时间】:2017-02-01 17:40:24 【问题描述】:我有一个包含 Qt3DWindow() 的 QWidget。我希望能够在 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 框架上时,覆盖窗口的鼠标抓取的技巧是什么?
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:我建议使用事件过滤器来拦截 Qt3DWindow 事件。您的 ModelView 类可以将自己安装为 Qt3DWindow 上的事件过滤器,检测车轮事件,自行处理它们,并返回 true 以指示它们已被处理。对于所有其他事件,返回false,Qt3DWindow会正常接收和处理。
查看文档中的 QObject::installEventfilter 和 QObject::eventFilter 方法。
【讨论】:
不客气……很高兴这是适合您的解决方案。 我也有类似的问题 (***.com/questions/51422690/…),您能帮帮我吗?以上是关于鼠标控制 Qt 3D 窗口的主要内容,如果未能解决你的问题,请参考以下文章