2012-01-05 43 views
8

我試圖將按鈕的click()信號連接到我自己的函數。該按鈕位於我使用QT Designer創建的小部件中。我使用QUiLoader加載.ui文件,如下所示:如何實現在Qt設計器中定義的信號/插槽

class MyWidget(QtGui.QMainWindow): 
    def __init__(self, *args): 
     QtGui.QMainWindow.__init__(self, *args) 

     loader = QtUiTools.QUiLoader() 
     file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui") 
     file.open(QtCore.QFile.ReadOnly) 
     self.myWidget = loader.load(file, self) 
     file.close() 

     self.setCentralWidget(self.myWidget) 

     btn = self.myWidget.findChild(QtGui.QPushButton, "HelloWorldButton") 
     btn.clicked.connect(self.slot1)   

    def slot1(self): 
     print "Received" 

這是連接按鈕clicked()信號的正確方法嗎?我發現我可以直接在Qt Designer中連接信號和插槽,但是如何準備並獲取代碼中的這些線程? 旁邊的問題:上面的代碼工作,但主窗口顯示大小錯誤。我如何確保它以合適的尺寸顯示?我應該用最小的高度/寬度限制來做到這一點嗎?

回答

12

使用Signals and Slots Editing Mode將預定義的Qt信號直接連接到預定義的Qt槽。因此,對於簡單對話框中的「關閉」按鈕,只需將按鈕上的連接拖到對話框中,選擇clicked()信號和reject()插槽,單擊「確定」,然後就沒有其他要做的事情了。 。

對於您想自己定義的信號和/或插槽,您無需事先在Designer中「準備」任何內容。一切都應該在你自己的代碼中完成。

你舉的例子已經說明了這一點還算不錯,但連接可以更簡單地完成,乾淨,像這樣:

self.myWidget.HelloWorldButton.clicked.connect(self.slot1) 

至於具有「尺寸不合適」主窗口:這是很難說從你展示的代碼中,但可能是因爲你沒有在你裝載的小部件中設置佈局。

順便說一句:有沒有你正在使用的特定原因QUiLoader?使用pyuic4編譯python模塊更加靈活,您可以從生成的代碼中學到很多東西。

編輯

對於我來說,設置在主窗體上佈局治癒你所談論的大小調整問題。

如果您不知道該怎麼做:在Designer中,右鍵單擊主窗體的空白部分,然後從菜單中選擇Layout/Layout in a Grid(工具欄上還有一個按鈕)。

一旦你這樣做了,調整窗體大小將自動拉伸它以適應包含的小部件。

+0

非常感謝!重新設置大小問題,在Qt Designer中設置最小大小有所幫助。我想也許有一種編程方式來確保主窗口的大小,以便它內部的所有小部件都可見。 – Sven 2012-01-06 00:11:42

+0

Re QUiLoader,沒有具體的原因,除了它很簡單。對於'pyuic4'方法,我將不得不研究如何讓Eclipse/PyDev自動爲.ui文件啓動'pyuic4'。 – Sven 2012-01-06 00:20:11

+0

@Sven。查看我更新的調整大小的答案:我很確定這是一個佈局問題。 – ekhumoro 2012-01-06 00:29:03