2010-02-01 81 views
1

我正在使用Qt Graphics View框架创建一个场景并将多个视图附加到相同的场景,其中这些视图呈现3D场景作为背景,而2D绘图则是一种叠加层。QGraphicsView接受的事件

我想拦截我的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,我应该如何继续?

最好的问候。

回答

0

我发现了罪魁祸首。这似乎是Qt中的一个错误。 QGraphicsView不会正确设置mouseMoveEvents的接受标志。这只发生在mouseMoveEvents上,其他事件都很好。据报道,Qt正在等待修复。

+0

你会如此友善地发布相应的错误报告的URL吗?我正在使用Qt 5.1(也检查过Qt 5.2)并面临同样的问题。你有没有发现你的案件的任何解决方法? – 2014-01-19 11:04:57

+0

它似乎是修复和关闭,但在这里你去: https://bugreports.qt-project.org/browse/QTBUG-8061 – erelender 2014-01-23 14:43:35

+0

我见过那一个,但它与mouseDoubleClickEvent()有关,但你在原始文章中提到了mouseMoveEvent()。这就是我问的原因。 – 2014-01-24 06:31:01