2016-11-09 1 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가 기본값 대신에 호출 할 당신 자신의 구현을 제공 할 수 있다는 것을 의미합니다. 재 구현이 기본 비헤이비어를 유지 (또는 어떤 방식 으로든 수정)해야하는 경우 기본 클래스 구현을 호출하여 다시 구현할 수 있습니다.

대조적으로 신호는 항상 응용 프로그램 안에 에서 발생합니다. 그 (것)들을위한 아무 기본 다루는 사람도 없다 - 간단하게 메시지를 방송한다 (라디오 비컨 같이). 메시지를 어떻게 처리할지 결정하는 것은 전적으로 청취자의 몫입니다. 청취자가 전혀없는 경우 나 메시지가 처리되지 않는 경우 중요하지 않습니다.

관련 문제