2017-02-23 5 views
0

私はかなりPyQtの新機能で、シグナル/スロットの設定に問題があります。PyQt5 - サブクラスでmousePressEventをキャプチャできません

Iは、その親を持つノードQWidgetから継承自己定義オブジェクト、NodeであるQWidget、内部にある自体QTabWidgetあるQTreeViewウィジェットを有します。

信号/スロットを介してモデルデータの変更を伴うQTableViewをトリガするためにノードをクリックできるようにします。

初期化子とここに示されているNodemousePressEvent()を上書き:ツリーに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 
関連する問題