Qt 如何阻止鼠标中键单击取消选择QGraphicscene中的项目,而不阻止它与场景中的项目?
我正在创建一个节点图,我希望能够单击场景中的空白区域并拖动鼠标中键进行导航,而无需取消选择场景中当前选定的项目。有什么建议吗 我可以在视图的mousePressEvent中阻止鼠标中键单击并获得正确的行为,但这样我就不再在场景中的项目上使用鼠标中键单击事件。我不介意在单击场景中的某个项目时,中键单击会导致单个选择,但是如果我在场景中的空白区域中单击鼠标中键,我不希望更改选择 这并没有涵盖我正在寻找的更复杂的行为: 我没有尝试使用eventFilter,因为我认为问题是相同的 我正在使用PyQt/PySide,FWIW 在我推出自己的解决方案之前,我想我应该在这里发布正确的方法或至少其他解决方案的想法 一些变通方法:Qt 如何阻止鼠标中键单击取消选择QGraphicscene中的项目,而不阻止它与场景中的项目?,qt,pyqt,selection,qgraphicsscene,qgraphicsitem,Qt,Pyqt,Selection,Qgraphicsscene,Qgraphicsitem,我正在创建一个节点图,我希望能够单击场景中的空白区域并拖动鼠标中键进行导航,而无需取消选择场景中当前选定的项目。有什么建议吗 我可以在视图的mousePressEvent中阻止鼠标中键单击并获得正确的行为,但这样我就不再在场景中的项目上使用鼠标中键单击事件。我不介意在单击场景中的某个项目时,中键单击会导致单个选择,但是如果我在场景中的空白区域中单击鼠标中键,我不希望更改选择 这并没有涵盖我正在寻找的更复杂的行为: 我没有尝试使用eventFilter,因为我认为问题是相同的 我正在使用PyQt/
- 将mousePressEvent阻止到场景,但迭代子项以直接传递它
- 仍在场景中的mousePressEvent中时恢复选择。在规模上可能对性能不利,但我认为很简单
def mousePressEvent(self, event):
# Prevent the QGraphicsScene default behavior to deselect-all when clicking on
# empty space by blocking the event in this circumstance.
item_under_the_mouse = self.itemAt(event.scenePos())
if event.button() == QtCore.Qt.MidButton and not item_under_the_mouse:
event.accept()
else:
super(GraphScene, self).mousePressEvent(event)
在
qgraphicscene::mousePressEvent
派生的实现中,如果是鼠标中键单击,请检查鼠标单击下的项目。如果没有,则接受事件,不调用基类实现。如果单击下有内容,则只需调用基本实现;你不必自己去尝试重新实现它。我认为这是总的想法:
void MyScene::mousePressEvent (QGraphicsSceneMouseEvent *evt)
{
if ((evt->buttons () & Qt::MidButton) && items (evt->scenePos ().count ())
{
QGraphicsScene::mousePressEvent (evt);
}
else
{
evt->accept ();
}
}
我不确定在这种情况下是否需要
accept
。我还没有编译或测试过这个,但希望它能帮助您朝着正确的方向前进。这就是我的方向。很高兴看到确认。一旦python版本开始工作,我会发布它。非常好……我不懂python,但我发现在答案中来回转换非常容易。