Qt ui在程序中的使用


首先介紹ui的文件,Qt 通過Qt designer 可以生成ui文件,ui文件以XML的方式記錄了designer生成界面的相關內容(大體內容包括widget的屬性,其內容的相關屬性,頭文件,變量,槽,函數)。在使用designer創建的form(也就是ui文件)最后在qmake的時候轉換成c++代碼。qmake能夠檢測到窗體文件(*.ui件), 通過uic(user interface compiler)可以把ui文件內容翻譯成標准的.h,.cpp文件,並存放在ui_xxx.h文件中。該文件給出了Dialog對應類的完整定義,類名為Ui_Dialog,並包含一個setupUi()成員函數,用於初使化form。在該頭文件的最后,使用一個Ui命名空間將該Ui_Dialog類包含進來,並派生出名為Dialog的子類,而Ui::Dialog就成為Designer設計的界面對外的接口了。

利用Designer設計生成ui的3種使用方式

1.直接使用法

  QWidget * w  = new QWidget;  

  Ui::Small s;  

  s.setupUi(w);  

  w.show();   

2.單繼承法

  1. //widget.h  
  2. #ifndef WIDGET_H  
  3. #define WIDGET_H  
  4. #include <QTabWidget>  
  5. #include <QWidget>  
  6. #include <QtGui>  
  7. #include "ui_first.h"                 //包含3個ui的頭文件  
  8. #include "ui_second.h"  
  9. #include "ui_third.h"  
  10. class MyWidget:public QWidget{  
  11.     Q_OBJECT  
  12. public:  
  13.     MyWidget();  
  14.     ~MyWidget();  
  15. private:  
  16.     QTabWidget *tab;  
  17.     Ui::First firstUi;                         //在MyWidget類中聲明了3個私有的窗體對象,  
  18.     Ui::Second secondUi;              // 我們在代碼中會通過該對象操作窗體元素  
  19.     Ui::Third thirdUi;  
  20. private slots:  
  21.     void slotChild();     
  22. };  
  23. #endif  
  24. //widget.cpp  
  25. #include "widget.h"  
  26. MyWidget::MyWidget(){  
  27.     tab = new QTabWidget(this);  
  28.     QWidget *w1 = new QWidget;                               //首先新建QWidget對象,以此QWidget對象為參數  
  29.     firstUi.setupUi(w1);                                                //調用第一個ui的setupUi(),生成第一個ui界面  
  30.     QWidget *w2 = new QWidget;  
  31.     secondUi.setupUi(w2);  
  32.     tab->addTab(w1,"First");  
  33.     tab->addTab(w2,"Second");  
  34.     tab->resize(300,300);  
  35.     connect(firstUi.childPushButton,SIGNAL(clicked()),this,SLOT(slotChild()));  
  36.     connect(secondUi.closePushButton,SIGNAL(clicked()),this,SLOT(close()));  
  37. }  
  38. MyWidget::~MyWidget(){  
  39. }  
  40. void MyWidget::slotChild(){  
  41.     QDialog *w3 = new QDialog;  
  42.     thirdUi.setupUi(w3);  
  43.     w3->exec();     
  44. }   

3.多繼承法

  1. #include "ui_third.h"  
  2. class ThirdDialog: public QDialog, private Ui::Third{  
  3.     ThirdDialog();  
  4.      ......  
  5. }  
  6. ThirdDialog:ThirdDialog(){  
  7.     setupUi(this);  
  8. }    
  9. 從以上 對 兩種繼承方式的分析可見,多繼承方式可以直接對ui頁面上的控件或函數進行操作調用,代碼編寫更
  10. 加簡介;而使用單繼承方式,在操作ui頁面上的控件時需要加上ui對象前綴,編寫代碼較為麻煩,但對於程序

    中所需用到的ui頁面較多時,使用單繼承法則要簡單靈活的多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM