色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 如何使用ui文件
如何使用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
        #define DIALOG_H

#include <QDialog>

namespace Ui {
                class Dialog;
        }

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

protected:
                void changeEvent(QEvent *e);

private:
                Ui::Dialog *ui;

private slots:
                void on_pushButton_clicked();
        };

#endif // DIALOG_H

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

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

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

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

針對于ui文件,不知道大家知不知道uic這個工具,這是qt繼承的一個工具,它可以利用ui生產.h文件。

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>
        #include <QtGui/QPushButton>

QT_BEGIN_NAMESPACE

class Ui_Dialog
        {
        public:
                QLabel *label;
                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"));
                        pushButton->setGeometry(QRect(20, 80, 75, 23));

                retranslateUi(Dialog);

                QMetaObject::connectSlotsByName(Dialog);
                } // 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));
                } // retranslateUi

};

namespace Ui {
                class Dialog: public Ui_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 <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();
        }

第二種方法相對比較簡單一點,就是將Ui::Dialog ui或Ui::Dialog *ui寫成一個新定義類的一個數據成員,也就是qtcreator提供的那種方法。

#include <QDialog>
        #include "ui_dialog.h"

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

protected:
                void changeEvent(QEvent *e);

private:
                Ui::Dialog *ui;

private slots:
                void on_pushButton_clicked();
        };

這樣使用的時候需要注意的是在初始化的時候要先完成子對象的初始化,在其構造函數中重寫構造函數。

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

第三種方法是以Ui_Dialog類為基類,派生一個新類,在該類的初始化函數中調用setupUi。

#ifndef DIALOG_H
        #define DIALOG_H

#include <QDialog>
        #include "ui_dialog.h"

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

實現如下:

#endif // DIALOG_H
        #include "dialog.h"
        #include "ui_dialog.h"

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

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

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 日本免费人成视频播放 | 精品无人区麻豆乱码1区2区 | 色综合久久婷婷五月 | 亚洲乱码无码永久不卡在线 | 欧美性白人极品1819hd | 四虎成人精品无码永久在线 | 18禁美女裸体免费网站 | 男人用嘴添女人私密视频 | 性奴秘书裸侍跪趴等主人玩 | 18禁美女裸体免费网站 | 四虎WWW永久在线精品 | 欧洲av免费在线观看 | h肉动漫无码无修6080动漫网 | 免费99精品国产自在在线 | 陌陌影视在线观看免费 | 成品网站w灬源码三叶草 | 精品一区二区不卡无码av | free性chinese熟女hd | 欧美自拍亚洲综合在线 | 人妻少妇69式99偷拍 | 98精品国产综合久久久久久欧美 | 国产精品日本亚洲欧美 | 亚洲欧美18岁网站 | 东京热无码人妻一区二区av | 两个人看的www免费视频中文 | 青青国产揄拍视频 | 天堂网中文字幕在线观看 | 亚洲国产精品高清在线第1页 | 亚洲成A∨人片在线观看无码 | 玩弄丰满少妇XXXXX性多毛 | 亚洲综合另类小说色区色噜噜 | 东北女人啪啪对白 | 久久九九国产精品怡红院 | 久久久久久久美 国产毛片 亚洲精品无码久久一线 | 噜噜噜噜私人影院 | 激情射精爆插热吻无码视频 | 欧洲区乱码一二三 | 蜜桃av资源| 无码专区WWW无码专区网网站 | 最近高清中文在线观看国语字幕7 | 国产精品久久久久久亚洲AV |