2011-02-14 121 views
3

我創建了一個使用Qt Creator(版本4.7.0)的新對話框 - 其中一個模板窗體(帶有OK和Cancel按鈕)。使用Qt Creator創建信號和插槽時出現錯誤

我希望用戶在窗體上輸入一些數據,然後當他們單擊確定時,它會保存該信息。所以我看了一下,看到當點擊確定按鈕時,它會發送信號給對話框的接受槽。

所以我右鍵單擊設計視圖中的對話框,並選擇「轉到插槽...」。我點擊了「接受」選項,將on_Dialog_accepted()方法放入對話框類中。然而,當我運行該程序並打開對話框時,我的控制檯出現錯誤,說我的控制檯說錯了QMetaObject::connectSlotsByName: No matching signal for on_Dialog_accepted()

那麼我做錯了什麼?

我發現了有關connectSlotsByName的文檔 - 但沒有任何關於缺乏經驗的Qt開發人員可以自己進入的明顯缺點。

回答

2

在選擇「Go to slot ...」前,在設計視圖中的對話框中右鍵單擊從對話框的信號到與QMetaObject :: connectSlotsByName()無效的對話框插槽之間的連接,因爲該方法搜索所有子對象,但不是該對象本身。

你想要做的事實上是右擊OK按鈕,然後從那裏選擇「Go to slot ...」。然後,它將創建一個帶有按鈕小部件名稱的插槽,並且在運行時正確連接。

QtDesigner讓你從對話框中選擇「Go to slot ...」是沒有意義的。你可能想爲Qt的開發者提供一個bug。

+0

謝謝 - 今晚我會說一說。我會看到有關製作該錯誤報告的信息。 – HorusKol 2011-02-14 23:03:25

2

基本上就像弗雷德解釋的那樣:你沒有做錯任何事情。 這是一個QtCreator bug。對於這個問題,這是一個很老的。不幸的是,即使兩年後,這方面的任何事情都沒有改變。

上述錯誤的受讓人決定將其排序重定向到該QtCore bug,簡單地詢問QMetaObject :: connectSlotsByName()以一種方式,它也處理過對象,不僅是它的孩子被改變(從而解決了QtCreator問題)。

我看了一下源代碼並提交了一個簡單的patch

更新:該補丁被錄取了,這意味着該bug將是固定的Qt 5.1。注意:它與您正在使用的QtCreator版本無關,而與您的代碼鏈接的Qt版本無關。