我有一个包含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框架上时,覆盖窗口的鼠标抓取的诀窍是什么?
提前感谢您的帮助。
发布于 2017-02-02 03:12:14
我建议使用事件过滤器来拦截Qt3DWindow事件。您的ModelView类可以将自身安装为Qt3DWindow上的事件过滤器,检测轮子事件,自行处理它们,并返回true以指示它们已被处理。对于所有其他事件,返回false,Qt3DWindow将正常接收和处理它们。
看看文档中的QObject::installEventfilter和QObject::eventFilter方法。
https://stackoverflow.com/questions/41986164
复制相似问题