从类声明中探索Qt的UI组合开发模式-组合模式

引言

在使用Qt的的的的的开发引用程序的时候,有的会用UI设计师来设计UI界面
有的则的英文直接在代码中写,那么那种好呢?
笔者认为使用UI设计师是最好的,尽管会生成许多多余的代发。

Qt的的组合开发模式

Qt的这样的设计是一种MVC的逻辑,可以把UI层与数据层分离。是一种很好的设计模式

代码分析

下面是一个简单的Qtcreator生成的简单的应用程序
widget.h的头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWit>

//此处是对 UI 自动生成 class Wet 的声明,
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
  //为什么是  *ui  (指针l)因为没有包含ui_widget.h,他在cpp中。因为ui_widget.h他是临时文件
  //在集成框架下开发的时候,中间文件由于某种原因会有编译顺序,与中间文件的删除。
  // 那么声明的,就用使用指针类型了。
  //在要使用的构造函数中开辟内存,实例化
  //执行ui->setup(this); 来实现对UI中的类实例化
    Ui::Widget *ui;
};

#endif // WIDGET_H

解读

  • 什么是* ui(指针l)因为没有包含ui_widget.h,他在cpp中。因为ui_widget.h他是临时文件
  • 集成框架下开发的时候,中间文件由于某种原因会有编译顺序,与中间文件的删除。
  • 声明的,就用使用指针类型了。
  • 要使用的构造函数中开放内存,实例化,执行ui-> setup(this);来实现对UI中的类实例化

下面是ui_widget.h
是由UI自动生成的代码是中间文件,执行clean或者重新编译是会删除的

/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 5.6.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QStringLiteral("Widget"));
        Widget->resize(400, 300);

        retranslateUi(Widget);

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QApplication::translate("Widget", "Widget", 0));
    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGE

猜你喜欢

转载自blog.csdn.net/osean_li/article/details/80214216