2014-05-09 3 views
0

일부 사용자 지정 동작을 시도하려면 QFileDialog 하위 클래스입니다. 대화 상자의 구성 요소에서 내 보낸 신호에 연결하고 싶습니다. textEdited 파일 이름 줄 편집을 수동으로 편집 할 때 신호. 나는 QFileDialog가 일부 신호 자체를 방출한다는 것을 이해하지만, 이에 대해서는 내가 응답하고자하는 경우를 다루지 않습니다.QFileDialog 구성 요소 신호

내가 생각할 수있는 두 가지 방법이 있지만 구현 방법을 알지 못합니다. 하나는 어떻게 든 신호에 연결하는 구성 요소에 대한 참조를 얻는 것입니다. 다른 하나는 이벤트 필터가있는 것이지만 이벤트 소스는 대화 상자 자체이므로 마우스 클릭 또는 키 누름이 발생하는 위치를 결정하는 방법을 알지 못합니다.

이러한 방법 중 하나를 사용할 수 있습니까? 또는 다른 방법은?

dialog = QFileDialog() 
layout = dialog.layout() 
# for i in range(layout.rowCount()): 
    # for j in range(layout.columnCount()): 
     # try: 
      # print i,j 
      # print layout.itemAtPosition(i,j).widget() 
     # except: 
      # pass 
line_edit = layout.itemAtPosition(2,1).widget() 
line_edit.setText('Hello Stack Overflow') 
dialog.exec_() 

이 당신이 연결할 수있는 신호의 무리가있는 대화 상자에서 QLineEdit에 액세스 할 수 있습니다 :

답변

1

여기에 하나의 옵션 (첫 번째 제안)입니다.

나는이 위젯을 찾기 위해 사용한 코드도 포함 시켰습니다. 방금 대화 상자의 레이아웃에서 위젯을 반복하고 내가 찾던 색인의 색인을 찾았습니다. 따라서 대화 상자의 다른 항목에 액세스해야하는 경우 쉽게 찾을 수 있습니다.

단점 : Qt의 이후 버전에서 레이아웃이 변경되면이 기능이 중단됩니다. QLineEdit의 인스턴스 인 위젯을 찾고 알고리즘을보다 강력하게 만들 수 있다고 가정 해 보겠습니다. 그러나 이와 같은 해킹 접근법에는 항상 위험이 있습니다!

+0

QLineEdit 위젯을 검색했습니다. 내 자신의 대화 상자를 처음부터 구현하는 것 외에는 다른 방법을 찾을 수 없습니다. – hackyday