目录
主函数
widget的声明
widget的定义
form file
.pro 文件
主函数
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
上面就是 Qt 刚创建的一个 Widget 类中的默认主函数,那么这个默认的主函数是什么意思呢?
-
在 main 函数中的两个参数一般是命令行上用的参数,用来将命令行中输入的数据,以参数的方式传到这个程序中。
-
QApplication 这个对象是一个 Qt 程序必须有的。
-
Widget 就是我们选择创建的文件的类名,这个类继承自 Qt 中的 QWidget 的一个类,而在 Qt 中继承是特别常见的。
-
w.show() 就是让这个控件中的内容显示出来。
-
a.exec() 就是执行起来这个程序。
widget的声明
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
这个 widget 就是我们自己选择创建的类,上面这个就是默认代码中 widget 中的声明
-
最上面的两个宏定义(条件编译)的意思就是防止头文件重复包含,和 #pragma once 是一个意思
-
namespace Ui { class Widget; } 这个就是Qt 中的 ui 文件相关的
-
public QWidget 是 Widget 继承的父类,我们前面也说了 Qt 是特别喜欢使用继承多态的
-
Q_OBJECT 是一个宏,展开后就是一堆代码的替换,如果没有这个代码,那么就没法使用Qt中的信号槽机制
-
构造函数中的参数是用来将这个对象挂到对象树上的,因为Qt是一个半自动化的内存释放,只要将创建的对象挂到对象树上,那么Qt就会帮你释放
-
最下面的成员变量的ui是和 form file 相关的
widget的定义
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
-
在Widget构造函数中初始化列表中,使用parent 初始化基类
-
还有一个就是我们刚才说的 ui ,然后初始化
-
在构造函数中调用的 ui->setupUi 就是用来将 Widget 和 form file 绑定的
form file
上面我们一直在说 form file ,那么form file 是什么呢? form file 实际上就是 ui 文件,我们可以看一下Qt 中的ui文件是什么样子的?
这里我们双击这个 ui 文件即可,然后我们就会进入到 qt disigner 中
这个就是可以使用拖拽来设计的ui文件,左边的那些都是一些常用的控件,我们可以使用这些控件来实现我们想要的功能。
然后我们可以再次点击左边的编辑按钮,此时我们就可以看到ui文件的本来面目。
就是这个样子,这就是 ui 文件的本来的面目,这个文件最后就会由 qt designer 将这个文件里面的内容,转化为 C++ 代码。
.pro 文件
在Qt Creater 中还有一个很重要的文件,就是 .pro 文件,我们看一下里面的内容
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
这个文件里面主要就是关于 Qt 构建的时候需要使用到的。
-
QT += core gui 因为 Qt 中是有很多模块的,但是因为很多时候用不到一些其他的模块,所以这个就是使用那个模块,就需要将对应的模块写到这个后面
-
CONFIG += c++11 这个就是当 Qt 编译的时候,按照什么标准来编译的,这里是使用 C++11来编译的
-
SOURCES HEADERS FORMS 这几个就是Qt用来管理那些文件是需要编译的,但是这里是不需要我们自己维护的,而是 Qt 会自动帮我们维护
这个 .pro 文件就像我们平时在 Linux 下写代码编译的时候使用到的 makefile 而这个文件加上 qmake 就和我们使用的 makefike 是一样的。