Qt4中ui文件的使用方法(Qt Creator)

 

Qt4中ui文件的使用方法 

ui文件的使用是在Qt4中不太容易上手的一點,由於不少同窗都是從Qt3升級到Qt4的,在升級過程當中發現這部分的變化很是之大,讓人有點無所適從。 Qt3的designer簡直能夠媲美一個ide,能夠編輯代碼,能夠管理工程, 但是到了Qt4卻彷彿是退化到了史前一萬年,咱們又來到那個茹毛飲血的蠻荒時代,工程管理的功能被完全剔除到designer之外。編程

 

Trolltech這樣作也是有道理的,在他們的Qt4 What’s New裏就闡述了他們的觀點,Designer被清晰地定義爲界面設計工具,只負責界面設計這個單純的功能。(估計這也是在爲後來的Creator發佈作鋪墊,全部你須要的工程管理的功能都放在這個新工具裏實現了。)ide

在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能夠用本身喜歡的名字代替)。學習

在製做本身的界面文件時要注意如下幾個要點:ui

一、要記住ui文件的名字,由於uic生成的代碼會存在ui_myform.h裏
二、要記住主窗體的object name, 由於ui文件提供的類名將以這個form的名字來命名
三、要特別注意你的form選擇的基類要和你代碼中的窗體類兼容
四、要記得給每一個後面須要訪問到的控件起一個有意義而且好記的object name, 由於ui文件提供的控件將以這些object name來命名this

清楚了以上幾點,在代碼中使用你的ui文件就會變得很是簡單。spa

第二步,將ui文件加入工程

這一步最簡單,只須要修改pro文件,加入FORMS+=myform.ui.net

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:

 

   
   
   
   
  1. //myform.h  
  2. #include 「ui_myform.h」  
  3.  
  4. class MyForm: public QWidget  
  5. {  
  6.      Q_OBJECT  
  7.   public:  
  8.      MyForm(QWidget*parent) { myui.setupUi(this); }  
  9.   private:  
  10.      Ui::BigWidget myui;  
  11.   private:  
  12.      void my_function(); 
  13. }; 

 

上面這段簡單的類的聲明是前文所述前三點要點的最佳例證,請對照要點的文字描述和具體的代碼體會其中的含義。這裏還有一點比較有意思的地方,就是ui文件提供的類被包含在了名爲Ui的name space裏,這樣作的目的是將ui文件的命名空間與用戶的代碼分離,避免二者出現命名衝突的狀況。相應的,咱們寫代碼的時候也要注意在使用ui文件中的類時要用「Ui::」的方式進行引用。

再來看cpp文件

 

   
   
   
   
  1. //myform.cpp 
  2. #include <QMessageBox>  
  3. #include 「myform.h」  
  4.  
  5. void MyForm::my_function(void) {  
  6.      QMessageBox::information(this, 「Name」, myui.lineeditName->text()); 

這裏隨便寫了一個函數,爲了說明如何在窗體類裏調用ui文件中定義的控件。這段代碼很是簡單,就很少做說明了。

有了單繼承的基礎,學習多繼承是小菜一碟。來段代碼看一下就明白了。

 

   
   
   
   
  1. //myform.h #include 「ui_myform.h」  
  2.  
  3. class MyForm: public QWidget, public Ui::BigWidget 
  4.       Q_OBJECT 
  5.    public
  6.       MyForm(QWidget*parent){setupUi(this);} 
  7.    private
  8.       void my_function(); 
  9. };  
  10.  
  11. //myform.cpp  
  12. #include <QMessageBox>  
  13. #include 「myform.h」  
  14. void MyForm::my_function(void) {  
  15.      QMessageBox::information(this, 「Name」, lineeditName->text()); 

是否是不用說明你們也能明白呢?多繼承其實就是不只從form須要的窗體類去派生,還要加上ui提供的類自己。這樣帶來的好處是你的窗體類繼承了ui裏的全部控件和方法,調用時就能夠少寫一些字。

單繼承和多繼承這兩種方法沒有好壞之分,你們能夠根據本身的編程習慣取捨。

第四步,編譯、驗證

在pro文件包含正確FORMS信息的狀況下,運行qmake; make就能夠編譯工程了。 make時若是你認真看一下輸出就會發現,make在最開始編譯的時候就會自動調用uic去生成須要的代碼。通過make以後ui_myform.h文件就生成了,建議你們去看一下這個文件的內容,其中仍是有一些有意思的東西值得研究的。

 

轉自:http://blog.csdn.net/yf24518150/article/details/5615960

相關文章
相關標籤/搜索