2017-02-23 24 views
0

我是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()工作方式有关,但我一直试图解决这一整天没有喜悦。

回答

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