1

我正在使用 Qt Graphics View 框架来创建一个场景并将多个视图附加到同一个场景,其中这些视图将 3D openscenegraph 场景渲染为背景,而 2D 绘图是一种叠加。

我试图在我的 OverlayViewport 类(继承 QGraphicsView)中拦截鼠标/键事件并相应地导航 3D 场景。下面是一个示例事件处理程序:

void OverlayViewport::mouseMoveEvent( QMouseEvent * event )
{
    QGraphicsView::mouseMoveEvent(event);
    if (event->isAccepted())
    {
        return;
    }

    3D_Scene_Stuff_Code();
}

但事件总是被接受,因此我的 3D 场景代码永远不会执行。如果我删除 isAccepted() 检查,我的代码总是会执行。

我想要实现的是,让场景做它的事情,比如选择、拖动 vs,如果它不做任何事情(不接受事件),做我的 3D 事情。

所以,这是我的问题:
1 - 我在这里走错路了吗?
2 - 如果场景不接受事件,我应该将事件转发到附加视图的场景并做我的事情吗?
3 - 如果不是 2,我应该如何进行?

最好的祝福。

4

1 回答 1

0

我找到了罪魁祸首。这似乎是Qt中的一个错误。QGraphicsView 没有适当地设置 mouseMoveEvents 的接受标志。这只发生在 mouseMoveEvents 上,其他事件都很好。报告给 Qt 并等待修复。

于 2010-03-15T09:08:46.910 回答