2017-02-23 51 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