久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 如何使用ui文件
如何使用ui文件
時間:2017-01-04作者:華清遠見

這兩天跟(gen)著班級輔(fu)導,總有(you)(you)學生感到很(hen)疑(yi)惑,用ui designer設計出來的ui文件(jian)是如何使用的,下面我(wo)從一(yi)個(ge)例子(zi)來說明下,希(xi)望能對(dui)有(you)(you)這樣疑(yi)惑的同學有(you)(you)幫助。

事實(shi)上,現在有了繼承設(she)計工(gong)具qtcreator,作為開(kai)發者再也不用(yong)考慮這(zhe)個問(wen)題,因(yin)為當你用(yong)qtcreator創建一個工(gong)程的(de)(de)時候,qtcreator提供的(de)(de)框架已經(jing)替我們完(wan)成(cheng)了這(zhe)個任務。

咱們(men)先從這個程序開始(shi)看:

新建一個工程,

在這個工程中(zhong)用ui designer來設計了這樣的一個界面

這(zhe)是我(wo)按ctrl+alt+r運行出(chu)來(lai)(lai)的,如(ru)何使這(zhe)個利用ui designer設計出(chu)來(lai)(lai)的ui文件能運行起來(lai)(lai)就是我(wo)們這(zhe)篇文章要議(yi)論(lun)的內(nei)容。

先(xian)來(lai)看(kan)看(kan)qtcreator提供的默認框(kuang)架(jia)是如何實(shi)現的。要(yao)研究qtcreator怎么實(shi)現,就得先(xian)看(kan)dialog.h這個文件。

#ifndef DIALOG_H
        #define DIALOG_H

#include <QDialog>

namespace Ui {
                class Dialog;
  &nbsp;     }

class Dialog : public QDialog {
                Q_OBJECT
        public:
                Dialog(QWidget *parent = 0);
    &nbsp;           ~Dialog();

protected:
          &nbsp;     void changeEvent(QEvent *e);

private:
                Ui::Dialog *ui;

private slots:
                void on_pushButton_clicked();
      &nbsp;&nbsp;};

#endif // DIALOG_H

觀察不難得出(chu),在(zai)上文中(zhong)我用(yong)紅(hong)色包(bao)含(han)的就是實現這(zhe)個程序的關鍵。它聲明一(yi)(yi)個類,將設計出(chu)來的ui界面作為(wei)該類的一(yi)(yi)個子(zi)(zi)對(dui)(dui)象,在(zai)其構(gou)造函(han)數中(zhong),先完成對(dui)(dui)子(zi)(zi)對(dui)(dui)象的構(gou)造,再使用(yong)子(zi)(zi)對(dui)(dui)象ui調(diao)用(yong)其setupUi(this)函(han)數實現ui的現實。

Dialog::Dialog(QWidget *parent) :
                QDialog(parent),
                ui(new Ui::Dialog)
        {
                ui->setupUi(this);
       &nbsp;}

看完上面的代碼(ma),我們來(lai)分析下到底(di)為什么要這樣來(lai)使用ui文件。

在沒有qtcreator之前,給了我們一個(ge)ui文件,該如何調(diao)用?

針(zhen)對于ui文件(jian),不知道大(da)家知不知道uic這(zhe)個(ge)工具(ju),這(zhe)是qt繼承的一個(ge)工具(ju),它可以利(li)用ui生產.h文件(jian)。

uic dialog.ui –o tt.h

就生產了下面的文件:

/********************************************************************************
        ** Form generated from reading UI file 'dialog.ui'
        **
        ** Created: Sun May 9 17:29:42 2010
        **        by: Qt User Interface Compiler version 4.6.2
        **
        ** WARNING! All changes made in this file will be lost when recompiling UI file!
        ********************************************************************************/

#ifndef TT_H
        #define TT_H

#include <QtCore/QVariant>
        #include <QtGui/QAction>
        #include <QtGui/QApplication>
        #include <QtGui/QButtonGroup>
        #include <QtGui/QDialog>
        #include <QtGui/QHeaderView>
        #include <QtGui/QLabel>
&nbsp;       #include <QtGui/QPushButton>

QT_BEGIN_NAMESPACE

class Ui_Dialog
        {
        public:
                QLabel *label;
        &nbsp;    ;   QPushButton *pushButton;

        void setupUi(QDialog *Dialog)
                {
                        if (Dialog->objectName().isEmpty())
                        Dialog->setObjectName(QString::fromUtf8("Dialog"));
                        Dialog->resize(115, 148);
                        label = new QLabel(Dialog);
                        label->setObjectName(QString::fromUtf8("label"));
                        label->setGeometry(QRect(10, 30, 91, 21));
                        QFont font;
                        font.setPointSize(12);
                        font.setBold(true);
                        font.setWeight(75);
                        label->setFont(font);
                        pushButton = new QPushButton(Dialog);
                        pushButton->setObjectName(QString::fromUtf8("pushButton"));
               &nbsp;        pushButton->setGeometry(QRect(20, 80, 75, 23));

     &nbsp;          retranslateUi(Dialog);

                QMetaObject::connectSlotsByName(Dialog);
 &nbsp;       &nbsp;      } // setupUi

        void retranslateUi(QDialog *Dialog)
                {
                        Dialog->setWindowTitle(QApplication::translate("Dialog",        "Dialog",        0,        QApplication::UnicodeUTF8));
                        label->setText(QApplication::translate("Dialog",        "hello,wang",        0,        QApplication::UnicodeUTF8));
                        pushButton->setText(QApplication::translate("Dialog",        "close",        0,        QApplication::UnicodeUTF8));
   ;      &nbsp;      } // retranslateUi

};

namespace Ui {
                class Dialog: public Ui_Dialog {};
   ;   &nbsp; } // namespace Ui

QT_END_NAMESPACE

#endif // TT_H

通(tong)過觀察(cha)我們(men)會(hui)發現uic自(zi)(zi)動將我們(men)設(she)計的(de)(de)ui文(wen)件,生(sheng)成了(le)一個類,在此例中為class Ui_Dialog。事實上也是(shi)這樣(yang),uic會(hui)自(zi)(zi)動會(hui)利(li)用設(she)計好的(de)(de)ui生(sheng)成一個包含類Ui_**的(de)(de)ui_**.h文(wen)件。那么在此例中,就(jiu)會(hui)將我們(men)設(she)計好的(de)(de)dialog就(jiu)會(hui)被(bei)uic文(wen)件解析(xi),生(sheng)成一個叫(jiao)做ui_dialog.h的(de)(de)文(wen)件,此文(wen)件中包含Ui_Dialog的(de)(de)類。

那么(me)總結出來,要讓ui design設計出來的界(jie)面顯示(shi)出來,只要能設法調用(yong)Ui_Dialog類的setupUi函數(shu)就行了。

一種簡(jian)單的方法,直接使用,重新寫一個(ge)這樣(yang)的main函(han)數。

#include <QtGui/QApplication>
  &nbsp;     #include <QDialog>

#include "ui_dialog.h"
        int main(int argc, char *argv[])
        {
        QApplication a(argc, argv);
        Ui::Dialog ui;
        QDialog *d=new QDialog;
        ui. setupUi(d);
                d->show();
                return a.exec();
   &nbsp;     }

第(di)二種(zhong)方法相對比(bi)較簡(jian)單(dan)一(yi)點,就(jiu)是將Ui::Dialog ui或Ui::Dialog *ui寫成(cheng)一(yi)個新定義類(lei)的一(yi)個數據成(cheng)員,也就(jiu)是qtcreator提供的那種(zhong)方法。

#include <QDialog>
 &nbsp;      #include "ui_dialog.h"

class Dialog : public QDialog {
                Q_OBJECT
        public:
                Dialog(QWidget *parent = 0);
         &nbsp;      ~Dialog();

protected:
               &nbsp;void changeEvent(QEvent *e);

private:
                Ui::Dialog *ui;

private slots:
                void on_pushButton_clicked();
      ;  };

這樣使用的時候(hou)需(xu)要注意的是在(zai)初始化的時候(hou)要先完成子對象(xiang)的初始化,在(zai)其(qi)構(gou)造(zao)函(han)數中重寫構(gou)造(zao)函(han)數。

Dialog::Dialog(QWidget *parent) :
                QDialog(parent),
                ui(new Ui::Dialog)
        {
                ui->setupUi(this);
      ;  }

第三(san)種方法是以Ui_Dialog類(lei)為基(ji)類(lei),派生一個(ge)新(xin)類(lei),在該類(lei)的初始化(hua)函數(shu)中(zhong)調用setupUi。

#ifndef DIALOG_H
   &nbsp;    #define DIALOG_H

#include <QDialog>
 &nbsp;      #include "ui_dialog.h"

class Dialog : public QDialog ,public Ui::Dialog
        {
                Q_OBJECT
        public:
                Dialog(QWidget *parent = 0);
    &nbsp;&nbsp;  };

實現如下:

#endif // DIALOG_H
        #include "dialog.h"
       &nbsp;#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
                QDialog(parent),
                Ui::Dialog()
        {
                setupUi(this);
   &nbsp;    }

希望通過(guo)講解,大家能總(zong)結出該如何使用ui文件(jian)。無非就是(shi)利用默認工具uic自動產生(sheng)的(de)(de)類(lei),去調用該類(lei)的(de)(de)setui函數。第一種(zhong)是(shi)直接使用,第二(er)種(zhong)是(shi)定(ding)義一個(ge)新類(lei),聲明一個(ge)ui子(zi)對象(xiang),第三種(zhong)是(shi)將ui作為基類(lei)派生(sheng)新的(de)(de)類(lei)。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)