PyQt5 - 无法在子类中捕获mousePressEvent
问题描述:
我是PyQt的新手,并且在设置信号/插槽时遇到问题。PyQt5 - 无法在子类中捕获mousePressEvent
我有QTreeView
插件,其亲本是QTabWidget
其本身是QWidget
,其节点是一个自定义的对象,Node
,它从QWidget
继承内部。
我想要启用点击节点,通过信号/插槽来触发伴随的QTableView
模型数据的变化。
初始化函数和重写mousePressEvent()
在Node
如下所示:在树的Node
项目,当点击
class Node(QtWidgets.QWidget):
def __init__(self, name, parent=None):
super(Node, self).__init__(parent)
self._name = name
self._children = []
self._parent = parent
if parent is not None:
parent.addChild(self)
trigger = QtCore.pyqtSignal(int, int)
def mousePressEvent(self, event):
event.accept()
print("Node clicked!")
self.trigger.emit() # this would have variables...
鼠标事件没有被捕获。
我确定这是与我如何设置小部件和/或mousePressEvent()
工作方式有关,但我一直试图解决这一整天没有喜悦。
答
我在这里走错了路。访问用户定义的QTreeView
项目的正确方法是使用QModelIndex.internalPointer()
方法和QAbstractItemView.clicked()
信号。
例如,
self.selectionTree.clicked.connect(self.get_single_return_data)
# ...
def get_single_return_data(self, index):
print("Signal triggered", index.internalPointer())
p = index.internalPointer()
# do something with p