我正在创建节点图,我希望能够单击场景中的空白区域并鼠标拖动进行导航,而无需取消选择场景中当前选定的项目。有什么建议吗?
我可以在视图的mousePressEvent中阻止中间点击并获得正确的行为,但之后我不再有中等鼠标点击事件处理场景中的项目。我不介意在点击场景中的项目时进行单击选择,但是如果我中间点击场景中的空白区域,我不希望选择更改。
这并没有涵盖我正在寻找的更复杂的行为:PyQt. How to block clear selection on mouse right click?
我没有尝试使用eventFilter,因为我认为问题是相同的
我正在使用PyQt / PySide,FWIW。
在我推出自己的解决方法之前,我认为我会在这里发布正确的方法或至少其他解决方法。
一些解决方法的想法:
任何反馈都会很棒!
[编辑:] 这是我的答案的python版本。代码测试。在我的QGraphicsScene派生类中:
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)
答案 0 :(得分:1)
在QGraphicsScene::mousePressEvent
派生的实现中,如果是鼠标中键,请在鼠标单击下检查项目。如果没有,则接受该事件,不要调用基类实现。如果点击下有什么内容,那么只需调用基础实现;你不必试图重新实现自己。我认为这是一般的想法:
void MyScene::mousePressEvent (QGraphicsSceneMouseEvent *evt)
{
if ((evt->buttons () & Qt::MidButton) && items (evt->scenePos ().count ())
{
QGraphicsScene::mousePressEvent (evt);
}
else
{
evt->accept ();
}
}
我不确定在这种情况下是否需要accept
。我没有编译或测试过这个,但希望能帮助你朝着正确的方向前进。