2016-11-09 8 views
1

定義済みの「拡張」メソッドを使用して独自のカスタムQTreeViewを作成すると、デフォルト信号を出力するために特別な処理を行う必要がありますか?私は何を求めているかを表す擬似コードをコメントアウトしました。または私は現在何をしているのですか?カスタムQTreeview拡張イベントメソッド

class JMTreeView(QtGui.QTreeView): 

    changed = QtCore.Signal() 

    def __init__(self): 
     super(JMTreeView, self).__init__() 
     self.expanded.connect(self.expanded_item) 

    def expanded_item(self, event): 
     print "expanded" 
     # super(JMTreeView, self).expanded(event) 

ダイアログの 'showEvent'をオーバーライドするときと同様に、私は関数の最後に 'super'を呼び出します。私は私の '拡張'メソッドに似たものを追加する必要がありますか?

def showEvent(self, event): 
    geom = self.frameGeometry() 
    geom.moveCenter(QtGui.QCursor.pos()) 
    self.setGeometry(geom) 
    super(Browser, self).showEvent(event) 

答えて

1

QTreeViewクラスがexpandedメソッドを持っていません。信号はexpandedのみです。さらに、信号とスロットのメカニズムはイベントシステムとはまったく別物なので、showEventのような保護されたメソッドをオーバーライドするのと並行しているわけではありません。

ほとんどのイベントハンドラ(showEventなど)は、アプリケーションの以外のを起源とするアクティビティに関連しています。彼らは通常、いくつかのデフォルトの動作を実装しますが、まったく何もしません。ほとんどの場合、仮想のメソッドです。つまり、Qtがデフォルトの代わりに呼び出す独自の実装を提供することができます。再実装がデフォルトの動作を維持する必要がある場合(または何らかの方法で変更する場合)は、ベースクラスの実装を呼び出すことで実装できます。

対照的に、信号は常に内にあり、アプリケーション内ではです。デフォルトのハンドラはありません。単純に(無線ビーコンのような)メッセージをブロードキャストします。メッセージをどのように処理するかは、リスナーが決定します。リスナーが存在しない場合や、メッセージが処理されない場合は問題ありません。

関連する問題