2010-05-17 99 views
2

我试图将自定义事件发送到现有的QGraphicsScene。 第一个事件正在与所需的位置在现场被解雇。从现在开始,所有其他事件即使与其他地点一起提供,也会进入同一地点(作为第一个事件)。 我手动点击场景内的某个地方后,它会“重新启动”,并在正确的位置接受下一个自定义事件(所有其他人仍然会去错误的地方)。发送自定义鼠标事件到QGraphicsScene

我的代码:

qreal sceneX = customX; 
qreal sceneY = customY; 

QGraphicsView* view = m_scene->views()[0]; 
QPoint ptView = view->mapFromScene(sceneX, sceneY); 
QPoint ptGlobal = view->viewport()->mapToGlobal(ptView); 

QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMouseRelease); 
event.setScenePos(QPoint(sceneX, sceneY)); 
event.setPos(QPoint(sceneX, sceneY)); 
event.setScreenPos(ptGlobal); 
event.setButton(Qt::LeftButton); 
event.setButtons(Qt::LeftButton); 
event.setModifiers(QApplication::keyboardModifiers()); 

qApp->sendEvent(m_scene, &event); 

customX和customY只是任意x和y,我动态生成。我多次用不同的customX和customY发送示例代码。

回答

1

找到了!

只好在最后添加一行:

m_scene->mouseGrabberItem()->ungrabMouse(); 
+0

你可以提供一个什么道理呢?正如我写的,我无法推断出这是否是偶然发生的事情,巧合还是真正的解决方案。 – IInspectable 2014-08-08 09:25:02