如何使用ui文件
時間:2017-01-04作者:華清遠見
這兩天跟著班級輔導,總有學生感到很疑惑,用ui designer設計出來的ui文件是如何使用的,下面我從一個例子來說明下,希望能對有這樣疑惑的同學有幫助。 事實上,現在有了繼承設計工具qtcreator,作為開發者再也不用考慮這個問題,因為當你用qtcreator創建一個工程的時候,qtcreator提供的框架已經替我們完成了這個任務。 咱們先從這個程序開始看: 新建一個工程,
在這個工程中用ui designer來設計了這樣的一個界面
這是我按ctrl+alt+r運行出來的,如何使這個利用ui designer設計出來的ui文件能運行起來就是我們這篇文章要議論的內容。 先來看看qtcreator提供的默認框架是如何實現的。要研究qtcreator怎么實現,就得先看dialog.h這個文件。
#ifndef DIALOG_H #include <QDialog>
namespace Ui {
class Dialog : public QDialog {
protected:
private:
private slots: #endif // DIALOG_H 觀察不難得出,在上文中我用紅色包含的就是實現這個程序的關鍵。它聲明一個類,將設計出來的ui界面作為該類的一個子對象,在其構造函數中,先完成對子對象的構造,再使用子對象ui調用其setupUi(this)函數實現ui的現實。
Dialog::Dialog(QWidget *parent) : 看完上面的代碼,我們來分析下到底為什么要這樣來使用ui文件。 在沒有qtcreator之前,給了我們一個ui文件,該如何調用? 針對于ui文件,不知道大家知不知道uic這個工具,這是qt繼承的一個工具,它可以利用ui生產.h文件。 uic dialog.ui –o tt.h 就生產了下面的文件:
/********************************************************************************
#ifndef TT_H
#include <QtCore/QVariant> QT_BEGIN_NAMESPACE
class Ui_Dialog
void setupUi(QDialog *Dialog) retranslateUi(Dialog);
QMetaObject::connectSlotsByName(Dialog);
void retranslateUi(QDialog *Dialog) };
namespace Ui { QT_END_NAMESPACE #endif // TT_H 通過觀察我們會發現uic自動將我們設計的ui文件,生成了一個類,在此例中為class Ui_Dialog。事實上也是這樣,uic會自動會利用設計好的ui生成一個包含類Ui_**的ui_**.h文件。那么在此例中,就會將我們設計好的dialog就會被uic文件解析,生成一個叫做ui_dialog.h的文件,此文件中包含Ui_Dialog的類。 那么總結出來,要讓ui design設計出來的界面顯示出來,只要能設法調用Ui_Dialog類的setupUi函數就行了。 一種簡單的方法,直接使用,重新寫一個這樣的main函數。
#include <QtGui/QApplication>
#include "ui_dialog.h" 第二種方法相對比較簡單一點,就是將Ui::Dialog ui或Ui::Dialog *ui寫成一個新定義類的一個數據成員,也就是qtcreator提供的那種方法。
#include <QDialog>
class Dialog : public QDialog {
protected:
private:
private slots: 這樣使用的時候需要注意的是在初始化的時候要先完成子對象的初始化,在其構造函數中重寫構造函數。
Dialog::Dialog(QWidget *parent) : 第三種方法是以Ui_Dialog類為基類,派生一個新類,在該類的初始化函數中調用setupUi。
#ifndef DIALOG_H
#include <QDialog>
class Dialog : public QDialog ,public Ui::Dialog 實現如下:
#endif // DIALOG_H
Dialog::Dialog(QWidget *parent) : 希望通過講解,大家能總結出該如何使用ui文件。無非就是利用默認工具uic自動產生的類,去調用該類的setui函數。第一種是直接使用,第二種是定義一個新類,聲明一個ui子對象,第三種是將ui作為基類派生新的類。
發表評論
|