您的位置:首页 > 产品设计 > UI/UE

Qt UI创建方法

2017-05-09 12:22 67 查看

http://blog.csdn.net/zzwdkxx/article/details/25823363

Qt程序两种制作页面的方式

1:自己通过代码实现,创建控件,添加布局管理器。

Widget::Widget(QWidget *parent)

    : QWidget(parent)

{

    label1 = new QLabel(this);

    label1->setText(QString::fromLocal8Bit("请输入圆的半径:"));

    lineEdit = new QLineEdit(this);

    label2 = new QLabel(this);

    button = new QPushButton(this);

    button->setText(QString::fromLocal8Bit("显示对应圆的面积"));

    QGridLayout *mainLayout = new QGridLayout(this);

    mainLayout->addWidget(label1,0,0);

    mainLayout->addWidget(lineEdit,0,1);

    mainLayout->addWidget(label2,1,0);

    mainLayout->addWidget(button,1,1);

 }

 

2:Qt Designer拖拽的形式产生ui文件。 

Qt Designer做的界面保存后会生成ui文件,

针对于ui文件,uic会利用设计好的ui生成一个包含类Ui_**的ui_**.h文件。exp:uic  dialog.ui  –o  ui_dialog.h

要让ui design设计出来的界面显示出来,只要能设法调用Ui_Dialog类的setupUi函数就行了。

就生产了下面的ui_dialog.h文件:

/**************************************ui_dialog.h*******************************************/

#ifndef UI_DIALOG_H

         #define UI_DIALOG_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 {};    //此处定义了命名空间,其中定义了一个Dialog类,继承自Ui_Dialog类

        } // namespace Ui

QT_END_NAMESPACE

#endif // TT_H

第一种直接使用

#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子对象,利用该对象来加载界面

就是将Ui::Dialog ui或Ui::Dialog *ui写成一个新定义类的一个数据成员,也就是qtcreator提供的那种方法。(也叫单继承方法,只继承了QDialog类)

#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。(也叫多重继承方法,继承了QDialog类和Ui::Dialog类)

#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);

         }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: