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