1.7 创建第一个Qt项目——大丙
https://www.bilibili.com/video/BV1Jp4y167R9
以下代码是Qt自动生成的,理解即可
1. 项目文件(.pro)
在创建的Qt项目中自动生成了一个后缀为 .pro 的项目文件,该文件中记录着项目的一些属性信息,具体信息如下:
# 在项目文件中, 注释需要使用 井号(#)
# 项目编译的时候需要加载哪些底层模块(写在后面)
QT += core gui # 如果当前Qt版本大于4, 会添加一个额外的模块: widgets
# Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets# 使用c++11新特性
CONFIG += c++11 #如果在项目中调用了废弃的函数, 项目编译的时候会有警告的提示
DEFINES += QT_DEPRECATED_WARNINGS# 项目中的源文件
SOURCES += \main.cpp \mainwindow.cpp# 项目中的头文件
HEADERS += \mainwindow.h# 项目中的窗口界面文件
FORMS += \mainwindow.ui# 后面的内容用不上就不用管
2. main.cpp
在这个源文件中有程序的入口函数 main(),下面给大家介绍下这个文件中自动生成的几行代码:
#include "mainwindow.h" // 生成的窗口类头文件
#include <QApplication> // 应用程序类头文件int main(int argc, char *argv[])
{// 创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个// 类的作用: 检测触发的事件, 进行事件循环并处理QApplication a(argc, argv);// 创建窗口类对象MainWindow w;// 显示窗口w.show();// 应用程序对象开始事件循环, 保证应用程序不退出return a.exec();
}
3. mainwindow.ui
在Qt中每一个窗口都对应一个可编辑的可视化界面(*.ui), 这个界面对应的是一个xml格式的文件, 一般情况下不需要在xml格式下对这个文件进行编辑, 关于这个文件结构了解即可。
<!-- 双击这个文件看到的是一个窗口界面, 如果使用文本编辑器打开看到的是一个XML格式的文件 -->
<!-- 看不懂这种格式没关系, 我们不需要在这种模式下操作这个文件。 -->
<!-- 这里只是给大家介绍这个文件的本质 -->
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><!-- 这个是Ui::MainWindow,不是外面那个 --><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"/><widget class="QMenuBar" name="menubar"/><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>
4. mainwindow.h
这个文件是窗口界面对应的类的头文件。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow> // Qt标准窗口类头文件// mainwindow.ui 文件中也有一个类叫 MainWindow, 将这个类放到命名空间 Ui 中
// 这个和外面的MainWindow是没有任何关联的,需要通过创建指针关联
// 因为此时还没声明MainWindow,所以先放进去Ui命名空间,写在MainWindow声明后会报错!
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE// 自定义的MainWindow类继承了Qt的标准窗口类
class MainWindow : public QMainWindow
{Q_OBJECT // 这个宏是为了能够使用Qt中的信号槽机制public:MainWindow(QWidget *parent = nullptr);~MainWindow();private:// 定义指针指向Ui::MainWindow对象,进而关联两个类Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
5. mainwindow.cpp
这个文件是窗口界面对应的类的源文件(也就是自定义的,外面的MainWindow)。
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)// 基于mainwindow.ui创建一个实例对象(Ui::MainWindow的), ui(new Ui::MainWindow)
{// ui是指向Ui::MainWindow的指针(mainwindow.ui的实例对象)// this是当前类的对象(MainWindow)// 将 mainwindow.ui 的实例对象和 当前类的对象进行关联// 这样同名的连个类对象就产生了关联, 合二为一了ui->setupUi(this);
}MainWindow::~MainWindow()
{// 析构释放堆区的Ui::MainWindowdelete ui;
}
