1

我有一个包含 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 框架上时,覆盖窗口鼠标抓取的技巧是什么?

提前感谢您的帮助。

4

1 回答 1

2

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

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

于 2017-02-01T19:12:14.020 回答