2014-05-09 72 views
0

我在繼承QFileDialog以嘗試獲取一些自定義行爲。 我想連接到對話框組件發出的信號,例如手動編輯文件名稱行編輯時的textEdited信號。據我所知,QFileDialog本身發出一些信號,但這些不包括我想回應的情況。QFileDialog組件信號

我有兩種方法可以想到這個,但不知道如何實現。一種是以某種方式獲得對連接到它的信號的組件的引用。另一個是事件過濾器,但事件源是對話框本身,所以我不知道如何確定鼠標點擊或按鍵發生的位置。

這兩種方法都可行嗎?或者另一種方式?

回答

1

這裏是一個選項(第一個建議):

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的對話框,裏面有一堆可以連接到信號英寸

我還包括我用來找到這個小部件的代碼。我只是在對話框佈局中迭代了小部件,並找到了我之後的那些索引。所以如果你需要訪問對話框中的其他內容,你應該能夠很容易地找到它!

該方法的缺點:如果佈局在未來版本的Qt中發生變化,則會中斷。我想你可以通過查找作爲QLineEdit的實例的小部件來使算法更健壯,但總是存在這樣的hacky方法的風險!

+0

我已經走了尋找QLineEdit部件。除了從零開始實施我自己的對話框之外,我看不到其他任何方式。 – hackyday