1. 项目创建
打开 Qt Creator 界面选择 New Project 或者选择菜单栏 【文件】-【新建文件或项目】菜单
弹出 New Project 对话框,选择 Qt Widgets Application
选择【Choose】按钮,弹出如下对话框
设置项目名称和路径,按照向导进行下一步
选择编译套件
向导会默认添加一个继承自 CMainWindow 的类,可以在此修改类的名字和基类。默认的基类有QMainWindow、QWidget 以及 QDialog 三个,我们可以选择 QWidget(类似于空窗口),这里我们可以先创建一个不带 UI 的界面,继续下一步
系统会默认给我们添加 main.cpp、mywidget.cpp、 mywidget.h 和一个.pro 项目文件,点击完成,即可创建出一个 Qt 桌面程序
2. 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
.pro 就是工程文件(project),它是 qmake 自动生成的用于生产 makefile 的配置文件。.pro 文件的
写法如下:
注释
从“#”开始,到这一行结束。
模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE = app
- app -建立一个应用程序的 makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
- lib - 建立一个库的 makefile。
- vcapp - 建立一个应用程序的 VisualStudio 项目文件。
- vclib - 建立一个库的 VisualStudio 项目文件。
- subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成 makefile 并且为它调用 make
#指定生成的应用程序名:
TARGET = QtDemo
#工程中包含的头文件
HEADERS += include/painter.h
#工程中包含的.ui 设计文件
FORMS += forms/painter.ui
#工程中包含的源文件
SOURCES += sources/main.cpp sources
#工程中包含的资源文件
RESOURCES += qrc/painter.qrc
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
这条语句的含义是,如果 QT_MAJOR_VERSION 大于 4(也就是当前使用的 Qt5 及更高版本)需要增加 widgets 模块。如果项目仅需支持 Qt5,也可以直接添加“QT += widgets”一句。不过为了保持代码兼容,最好还是按照 QtCreator 生成的语句编写。
#配置信息
CONFIG 用来告诉 qmake 关于应用程序的配置信息。
CONFIG += c11 //使用 c11 的特性
在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项更安全。
3. main()
在这个源文件中有程序的入口函数 main(),下面给大家介绍下这个文件中自动生成的几行代码
#include "mainwindow.h" // 生成的窗口类头文件
#include <QApplication> // 应用程序类头文件
int main(int argc, char *argv[])
{
// 创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个
// 类的作用: 检测触发的事件, 进行事件循环并处理
QApplication a(argc, argv);
// 创建窗口类对象
MainWindow w;
// 显示窗口
w.show();
// 应用程序对象开始事件循环, 保证应用程序不退出
return a.exec();
}
解释:
- Qt 系统提供的标准类名声明头文件没有.h 后缀
- Qt 一个类对应一个头文件,类名就是头文件名
- QApplication 应用程序类
- 管理图形用户界面应用程序的控制流和主要设置。
- 是 Qt 的整个后台管理的命脉它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。
- 对于任何一个使用 Qt 的图形用户界面应用程序,都正好存在一个 QApplication 对象,而
- 不论这个应用程序在同一时间内是不是有 0、1、2 或更多个窗口。
- a.exec()
程序进入消息循环,等待对用户输入进行响应。这里 main()把控制权转交给 Qt,Qt 完成事件处理工作,当应用程序退出的时候 exec()的值就会返回。在 exec()中,Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
4. mainwindow.ui
在 Qt 中每一个窗口都对应一个可编辑的可视化界面(*.ui), 这个界面对应的是一个 xml 格式的文件,一般情况下不需要在 xml 格式下对这个文件进行编辑,关于这个文件结构了解即可。
5. mainwindow.h
这个文件是窗口界面对应的类的头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow> // Qt标准窗口类头文件
QT_BEGIN_NAMESPACE
// mainwindow.ui 文件中也有一个类叫 MainWindow, 将这个类放到命名空间 Ui 中
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT // 这个宏是为了能够使用Qt中的信号槽机制
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui; // 定义指针指向窗口的 UI 对象
};
#endif // MAINWINDOW_H
6. mainwindow.cpp
这个文件是窗口界面对应的类的源文件。
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow) // 基于mainwindow.ui创建一个实例对象
{
// 将 mainwindow.ui 的实例对象和 当前类的对象进行关联
// 这样同名的连个类对象就产生了关联, 合二为一了
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
评论区