代码之家  ›  专栏  ›  技术社区  ›  erelender

QGraphicsView已接受事件

  •  1
  • erelender  · 技术社区  · 15 年前

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

    我试图在OverlayView类(继承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,我应该如何继续?

    顺致敬意,

    1 回复  |  直到 15 年前
        1
  •  0
  •   erelender    15 年前

    我找到了罪犯。这似乎是Qt中的一个bug。QGraphicsView未正确设置mouseMoveEvents的接受标志。这种情况仅适用于mouseMoveEvents,其他事件也可以。报告给Qt并等待修复。