【发布时间】:2016-04-04 22:49:43
【问题描述】:
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 是最好的。
【问题讨论】:
-
This C++ 答案可能对您有所帮助,但它基本上是按照您的建议捕获和存储鼠标状态,而不是在全局级别(它只需要在您关心的小部件中用餐)