我对PyQt很陌生,并且在设置信号/插槽时遇到了问题。
我有一个QTreeView
小部件,其父级是QTabWidget
,它本身位于QWidget
内,其节点是一个自定义对象Node
,它继承了来自QWidget
。
我想启用点击节点,通过信号/插槽触发伴随QTableView
中模型数据的更改。
此处显示的mousePressEvent()
中的初始值设定项和覆盖的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...
单击树中的Node
项时,未捕获鼠标事件。
我确信这与我如何设置窗口小部件和/或mousePressEvent()
的工作方式有关,但我一直在努力解决这一问题。
答案 0 :(得分:0)
我在这里走错了路。访问用户定义的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