Qt4中ui文件的使用方法

Qt】Qt4中ui文件的使用方法 收藏
ui文件的使用是在Qt4中不太容易上手的一點,因爲很多同學都是從Qt3升級到Qt4的,在升級過程中發現這部分的變化非常之大,讓人有點無所適從。 Qt3的designer簡直可以媲美一個ide,可以編輯代碼,可以管理工程, 可是到了Qt4卻彷彿是退化到了史前一萬年,我們又來到那個茹毛飲血的蠻荒時代,工程管理的功能被徹底剔除到designer以外。
Trolltech這樣做也是有道理的,在他們的Qt4 What’s New裏就闡述了他們的觀點,Designer被清晰地定義爲界面設計工具,只負責界面設計這個單純的功能。(估計這也是在爲後來的Creator發佈做鋪墊,所有你需要的工程管理的功能都放在這個新工具裏實現了。)
在qt文檔中有一篇專門介紹ui文件在代碼中的使用的文章,寫的非常詳細,而且附有清楚的代碼例子。這篇文章在Assitant–>Content–>Qt Designer Manual–>Manual–>Using a Component in Your Application(4.5以後該文章更名爲Using a Designer .ui File in Your Application)。 不過在筆者實踐過程中發現,其實還有一些隱藏在代碼之外的細節需要大家額外注意的,還是需要點撥一下。
鑑於一些同學還沒適應大篇英文的閱讀,另外鑑於這篇文檔確實不那麼好找,在這裏做個總結,希望對大家有所幫助。
第一步, 製作ui文件。
首先應該用Qt Designer繪製一個自己的界面,並存爲myform.ui(這裏的myform可以用自己喜歡的名字代替)。
在製作自己的界面文件時要注意以下幾個要點:
1、要記住ui文件的名字,因爲uic生成的代碼會存在ui_myform.h裏
2、要記住主窗體的object name, 因爲ui文件提供的類名將以這個form的名字來命名
3、要特別注意你的form選擇的基類要和你代碼中的窗體類兼容
4、要記得給每個後面需要訪問到的控件起一個有意義並且好記的object name, 因爲ui文件提供的控件將以這些object name來命名
清楚了以上幾點,在代碼中使用你的ui文件就會變得非常簡單。
第二步,將ui文件加入工程
這一步最簡單,只需要修改pro文件,加入FORMS+=myform.ui
qmake -project命令也可以識別後綴名爲ui的文件,並將之加入工程。
第三步,在代碼中引用ui文件
官方介紹的使用ui文件的方法有三種,一個是直接引用,二是單繼承,三是多繼承。 第一種方法其實很不實用,大家去看一下文檔中的例子就可以了;第二種和第三種沒有本質的差別,可以並作一類,這裏做重點介紹。
ui文件最終會被翻譯成標準的C++代碼,並存入一個.h文件中,這個過程在調用make之後才進行,所以初始情況下你是看不到這個ui_myform.h文件的,只有經過了make過程該頭文件才生成。不過沒關係,沒有這個文件我們照樣能寫出正確的代碼。
單繼承方式簡單來說就是在代碼中首先要自定義一個子類(後文稱爲MyForm),該類要從form對應的窗體類(或其兼容的子類)派生;並用ui生成的類定義一個類裏的成員變量(後文成文myui)。這樣在MyForm的構造函數中可以直接調用myui和myui中的變量和函數,使用起來很方便。 舉例說明, 比如這裏有一個ui文件叫myform.ui, ui文件裏定義的窗體名字爲BigWidget,上面擺放了一個單行編輯控件叫lineeditName:
//myform.h #include “ui_myform.h” class MyForm: public QWidget { Q_OBJECT public: MyForm(QWidget*parent) { myui.setupUi(this); } private: Ui::BigWidget myui; private: void my_function(); };上面這段簡單的類的聲明是前文所述前三點要點的最佳例證,請對照要點的文字描述和具體的代碼體會其中的含義。這裏還有一點比較有意思的地方,就是ui文件提供的類被包含在了名爲Ui的name space裏,這樣做的目的是將ui文件的命名空間與用戶的代碼分離,避免兩者出現命名衝突的情況。相應的,我們寫代碼的時候也要注意在使用ui文件中的類時要用“Ui::”的方式進行引用。
再來看cpp文件
//myform.cpp #include <QMessageBox> #include “myform.h” void my_function(void) { QMessageBox::information(this, “Name”, myui.lineeditName->text()); }這裏隨便寫了一個函數,爲了說明如何在窗體類裏調用ui文件中定義的控件。這段代碼非常簡單,就不多作說明了。
有了單繼承的基礎,學習多繼承是小菜一碟。來段代碼看一下就明白了。
//myform.h #include “ui_myform.h” class MyForm: public QWidget, public Ui::BigWidget{Q_OBJECTpublic:MyForm(QWidget*parent){setupUi(this);}private:void my_function();}; //myform.cpp #include <QMessageBox> #include “myform.h” void my_function(void) { QMessageBox::information(this, “Name”, lineeditName->text()); }是不是不用說明大家也能明白呢?多繼承其實就是不僅從form需要的窗體類去派生,還要加上ui提供的類本身。這樣帶來的好處是你的窗體類繼承了ui裏的所有控件和方法,調用時就可以少寫一些字。
單繼承和多繼承這兩種方法沒有好壞之分,大家可以根據自己的編程習慣取捨。
第四步,編譯、驗證
在pro文件包含正確FORMS信息的情況下,運行qmake; make就可以編譯工程了。 make時如果你認真看一下輸出就會發現,make在最開始編譯的時候就會自動調用uic去生成需要的代碼。經過make之後ui_myform.h文件就生成了,建議大家去看一下這個文件的內容,其中還是有一些有意思的東西值得研究的。
 
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/yf24518150/archive/2010/05/22/5615960.aspx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章