引言
在使用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