首先介紹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.單繼承法
- //widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QTabWidget>
- #include <QWidget>
- #include <QtGui>
- #include "ui_first.h" //包含3個ui的頭文件
- #include "ui_second.h"
- #include "ui_third.h"
- class MyWidget:public QWidget{
- Q_OBJECT
- public:
- MyWidget();
- ~MyWidget();
- private:
- QTabWidget *tab;
- Ui::First firstUi; //在MyWidget類中聲明了3個私有的窗體對象,
- Ui::Second secondUi; // 我們在代碼中會通過該對象操作窗體元素
- Ui::Third thirdUi;
- private slots:
- void slotChild();
- };
- #endif
- //widget.cpp
- #include "widget.h"
- MyWidget::MyWidget(){
- tab = new QTabWidget(this);
- QWidget *w1 = new QWidget; //首先新建QWidget對象,以此QWidget對象為參數
- firstUi.setupUi(w1); //調用第一個ui的setupUi(),生成第一個ui界面
- QWidget *w2 = new QWidget;
- secondUi.setupUi(w2);
- tab->addTab(w1,"First");
- tab->addTab(w2,"Second");
- tab->resize(300,300);
- connect(firstUi.childPushButton,SIGNAL(clicked()),this,SLOT(slotChild()));
- connect(secondUi.closePushButton,SIGNAL(clicked()),this,SLOT(close()));
- }
- MyWidget::~MyWidget(){
- }
- void MyWidget::slotChild(){
- QDialog *w3 = new QDialog;
- thirdUi.setupUi(w3);
- w3->exec();
- }
3.多繼承法
- #include "ui_third.h"
- class ThirdDialog: public QDialog, private Ui::Third{
- ThirdDialog();
- ......
- }
- ThirdDialog:ThirdDialog(){
- setupUi(this);
- }
- 從以上 對 兩種繼承方式的分析可見,多繼承方式可以直接對ui頁面上的控件或函數進行操作調用,代碼編寫更
-
加簡介;而使用單繼承方式,在操作ui頁面上的控件時需要加上ui對象前綴,編寫代碼較為麻煩,但對於程序
中所需用到的ui頁面較多時,使用單繼承法則要簡單靈活的多。
