itemClicked / itemDoubleClicked信号似乎无法区分鼠标左键和中键。我想根据点击的内容做不同的事情。似乎点击发生在发布上,所以app.mouseButtons()在实际调用itemClicked()
时报告NoButtons。
虽然我还没有尝试过,但我假设我可以做一些主要的应用程序鼠标测试来全局存储状态,然后从我的itemClicked()
读取它,但这感觉真的很复杂和hacky,有没有更好的方法找不到?
[更新]按照建议,我覆盖了树的鼠标事件。我也不想为此专门为QTreeWidget创建子类,所以为了完整起见,这就是我所做的:
setattr(self.tree, 'middleMouse', False)
def mousePressEvent(self, event):
self.middleMouse = event.button() == QtCore.Qt.MidButton
return QtGui.QTreeWidget.mousePressEvent(self, event)
self.tree.mousePressEvent = types.MethodType(mousePressEvent, self.tree)
def itemClicked(item):
if self.tree.middleMouse:
<do something>
else:
<do another thing>
self.tree.itemClicked.connect(itemClicked)
Python是最好的。
答案 0 :(得分:1)
我看到的唯一方法是重新实现QTreeWidget的mouseDoubleClickEvent(QMouseEvent *事件),并根据触发事件的按钮更改行为。
你能用以下的东西做什么:
yourQtTreeView.mouseDoubleClickEvent = self.mymouseDoubleClickEvent
def mymouseDoubleClickEvent(event):
#your code capturing the event
我没有对此进行测试,但我认为这是方向。