我正在使用Qt Graphics View框架创建一个场景,并将多个视图附加到同一场景,其中这些视图呈现一个3D开放图场景作为背景,而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,我应该如何继续?
诚挚的问候。
发布于 2010-03-15 17:08:47
我找到了罪魁祸首这似乎是Qt中的一个bug。QGraphicsView没有适当地设置mouseMoveEvents的accepted标志。这只发生在mouseMoveEvents上,其他事件都没问题。已上报给Qt,正在等待修复。
https://stackoverflow.com/questions/2175503
复制相似问题