沒有合適的構造函數可用??

    最近又在看《C++ GUI Programing with Qt 4》(Second Edition),按照裏面的裏面的例子做着。我沒有按照書裏的步驟,先繪製界面,再編寫頭文件、源文件……而是直接用的Qt Creator新建的工程。結果按照書裏說的,在Qt設計師中修改了窗體的objectName後,就老編譯不過去了。老是說“Ui::xxxxxxx沒有合適的構造函數可用”。我想肯定是修改了objectName,沒有對應修改頭文件或源文件的一些地方的原因。

    想了一下,將工程中的源文件和頭文件中包含原來objectName的地方全部改爲現在的objectName,問題就解決了。

    大家不要笑,本人才接觸這個東西,對它的機制還不太瞭解。

    我做的是例子2.4——改變形狀的對話框。用Qt Creator編譯sortdialog後,在sort-build-desktop目錄中會產生一個名爲ui_sortdialog.h的文件。這個文件實際上就是Qt界面的C++實現。我們打開這個文件,可以看到在代碼的末尾有個:

      namespace Ui {

                              class SortDialog: public Ui_SortDialog {};

                             } // namespace Ui

    這麼看,那命名規則就是class objectName:public Ui_objectName{}。也就是說SortDialog類是從Ui_SortDialog繼承而來的。在Qt Creator2.0.1(Qt 4.7)生成的工程文件中,sortdialog.h是沒有包含ui_sortdialog.h的。那麼它是怎麼調用Ui的呢?它沒有像書中寫的那樣工作,而是在SortDialog類中寫了這麼一句“private: Ui::SortDialog *ui",建立了一個Ui類的指針。剛纔我們知道Ui::SortDialog是從Ui_Sortdialog類繼承而來的,這樣通過Ui::SortDialog類的指針也就可以對用戶創建的界面中的空間進行操作了。又因爲在sortdialog.h中並沒有包含ui_sortdialog.h,所以爲了使編譯器不出錯,程序在sortdialog.h中又定義了一個同樣的命名空間

      namespace Ui { class SortDialog; }。然後,在sortdialog.cpp中,程序包含了ui_sortdialog.h。在這個文件中,實現了SortDialog類。

    除了這些以外,其餘部分應該就和書裏面一樣了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章