【保姆级教程】项目创建 - 初识 Qt 从零基础入门开始
从创建项目开始 Qt Creator 能自发的生成必要文件,包括 Cmake 和 qmake 构建工具以及进行交叉编译,确保了在桌面、移动和嵌入式操作系统上构建并运行应用进程,Qt Creator 将源代码编译为机器语言,加快启动时间和 UI 性能。
目录
一、Qt Creator 简介
Qt Creator 是由 Qt Group 公司自 1991年 开发的一款跨平台的集成开发环境(IDE),用户可以在 Qt Creator 的代码编辑器上使用 C ++、QML、JavaScript、Python 以及其他语言编写应用进程。Qt Creator 可在 Windows,Linux 和 macOS 桌面操作系统上运行,并支持用户在桌面、移动和嵌入式平台上创建应用进程。Qt Creator 集成了主流的版本控制功能,可以对接及调用的功能包括 Git、Subversion、Perforce 和 Mercurial。
从创建项目开始 Qt Creator 能自发的生成必要文件, 包括 Cmake 和 qmake 构建工具以及进行交叉编译,确保了在桌面、移动和嵌入式操作系统上构建并运行应用进程,Qt Creator 将源代码编译为机器语言,加快启动时间和 UI 性能。
二、开发环境:
- 系统平台: Windows 11
- 系统环境:Ubuntu 20.04
- 开发平台:Qt Creator 5.15.2
- 虚拟环境: Windows Subsystem for Linux 2(WSL 2)
三、项目创建
1. 新建工程
初次打开 Qt Creator 后选择左上角的 File (文件)选项,紧接着选择 New Project... (新建工程)选项
新建工程页面提供多种用户界面编程模板,本文选择的 Application 选项呈现出 4 种基本的样式,其他版本的 Qt Creator 有可能时 2 个选项。
Qt Widgets Application 简介:
创建一个基于 widget 的 Qt 应用程序,其中包含一个基于 Qt Designer 的主窗口以及用于实现应用程序逻辑的 C++ 源文件和头文件,提供可视化的用户图形界面。(** 本文选择 **)
Qt Console Application 简介:
创建一个包含单个 main.cpp 文件的项目,该文件只有代码编写界面,没有提供可视化的图形用户界面。
Qt Quick Application 简介:创建包含 QML 和 C++ 代码的 Qt Quick 应用程序,可以构建应用程序并将其部署到桌面、嵌入式和移动目标平台。其中创建了一个可在 Qt Design Studio 中打开的项目,拥有一个用于 Qt Quick UI 的可视化编辑器。
Qt Quick Application(compat) 简介:
创建一个包含空窗口的 Qt Quick 应用程序,提供 CMake 以外的其他编译系统或低于 6 的 Qt "兼容 "版本。
给工程文件命名时需注意不能出现 '空格' 在工程名的名称中,否则会报错,填写好名称后点击 Next (下一项),进入构建工具选项。
进入构建工具选项以后会看到有三个选项供我们选择,本文选择 qmake 进行构建
qmake 简介:
qmake 是当前使用 Qt Creator 最广泛的构建系统。qmake 是根据 Qt 工程文件(.pro)的配置生成对应的 MakeFile 文件。工程文件(.pro)一般都是由 Qt 的开发环境 Qt Creator在运行过程中自动生成的,只需要使用 Qt Creator 创建工程或运行工程。在 Linux 系统下会生成对应的 MakeFile 文件,指导 make 工具编译工程项目。
CMake 简介:
cmake 是跨平台项目管理工具,可以使用更为抽象的语法来组织项目。例如构建工程所需要的依赖库,如果需要嗲用 math 库,在使用过程中不在需要将 math.dll 以及 libmath.so 文件都写入到构建文档中去,在 Linux 系统下会生成对应的 MakeFile 文件,指导 make 工具编译工程项目。
QBS 简介:
QBS 是新一代的构建工具,构建速度上相比 qmake 编译的速度更快, QBS 能够直接从项目文件的项目描述中生成编译文件。而传统的 MakeFile 生成工具( qmake、CMake) 会在编译过程中生成 MakeFile 文件,再由 make 工具根据 MakeFile 文件的相关配置去执行。QBS 本质是一个生成器、直接调用编译器、连接器以及其他工具。
下面进入的选项为类文件名称,实质是给自己的窗口起一个名称,本文在第二项基类中选择了 QMainWindow
Qwidget 简介:
Qwidget 是 Qt 中所有用户界面元素的基类。从按钮到文本框,甚至包括窗口和对话框,所有这些都是 Qwidget 的子类。Qwidget 可以是可视化元素,也可以作为其他可视化元素的容器。简单来说 Qwidget 常用于嵌入式开发,无标题栏、无底部选项栏的一种界面。
QDialog 简介:
QDialog 是用于创建对话框的类。对话框是一种特殊类型的窗口,通常用于短暂的任务和简短的通信。用户可以通过对话框输入或选择信息,例如一些应用的 “确定” 弹窗之类的界面。
QMainWindow 简介:
QMainWindow 是专为需要菜单栏、工具栏、状态栏和中央窗口小控件的标准应用程序而设计的,通常用作应用程序的主窗口,包含前三项所有的功能。
参考原文:Qt6.2教程——2.介绍 Qt 中的 QWidgets、QMainWindow 和 QDialog - 知乎
Qt Creator 的翻译选项,本文不对此处做赘述,内容可以参考:超越 C++ 的 Qt 翻译 - 知乎
下面进入构建套件的选项卡,根据英文 Kit 可以理解为工具箱的意思,其中包含很多可以使用到的工具。此处的 Desktop Qt5.15.2 GCC 64bit 编译器是在安装组件时选择的编译器,具体根据所安装的内容进行选择
此处为项目管理选项卡,此处可以选择版本控制器包括前文所叙述的 Git、Subversion、Perforce 和 Mercurial 等工具,本文在此处不做选择。
此时项目工程文件就搭建完毕了,这里是初始的空白界面
2. 项目文件介绍
- .pro 是项目管理文件,这个项目管理文件十分重要,当你加入了文件或者删 除了文件,Qt Creator 会自动修改这个*.pro文件。有时候需要打开这个*.pro文件添加我们 的设置项。
- Header分组,这个节点下存放的是项目内所有的头文件*.h。
- Source分组,这个节点下存放的是项目内的所有C++源码文件*.cpp。
- Forms分组,这个节点下是存放项目内所有界面文件*.ui,*.ui文件由XML语言描述组成, 编译时会生成相应的cpp文件。
3. *.pro 文件
此处存放的是 qmake 构建工具构建 MakeFile 文件所需的相关参数
# 添加了Qt的支持的模块,core与gui库是Qt的默认设置。
QT += core gui
# 相比 Qt4 版本,Qt5 在 main.cpp 中的 application 增加了 QtWidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#,Qt5.15 使用的是 C++ 17
CONFIG += c++17
# 编译生成的目标文件名,具体请进入 build 文件夹下查看,在工程文件的上一级目录
TARGET = main
# You can make your code fail to compile if it uses deprecated APIs.
# 如果您的代码使用了过时的 API,您可以让它无法编译。
# In order to do so, uncomment the following line.
# 为此,请取消下面一行的注释。
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
# disables all the APIs deprecated before Qt 6.0.0
# 禁用所有 Qt 6.0.0 之前废弃的 API
# 变量 SOURCES 目录下存储的源文件
SOURCES += \
main.cpp \
mainwindow.cpp
# 变量 HEADERS 目录下存储的头文件
HEADERS += \
mainwindow.h
# FORMS存放的是ui界面文件
FORMS += \
mainwindow.ui
# 部署默认的规则,此处可以添加用户所需要自定义的规则
# Default rules for deployment.
# qnx:判断是不是qnx操作系统,赋值 target.path = /temp/$${TARGET}/bin
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Qt Creator 支持的相关模块可以参考:https://doc.qt.io/archives/ ,在本页面中选择安装 Qt 的对应版本。
接下来选择 Qt 的所有模块页面
Qt Essentials 定义了Qt在所有平台上的基础。它们可在所有受支持的开发平台和经过测试的目标平台上使用。除了测试模块将保持源代码兼容外,这些模块将在整个Qt 5中保持源代码和二进制兼容。基本模块是通用的,对大多数Qt应用程序都很有用。用于特殊用途的模块被视为附加模块,即使它在所有受支持的平台上都可用。 (点击相应的模块即可进入编写指南)
模块 | 描述 |
---|---|
Qt Core | 其他模块使用的核心非图形类。 |
Qt GUI | 图形用户界面 (GUI) 组件的基类。包括 OpenGL。 |
Qt Multimedia | 音频、视频、无线电和相机功能类。 |
Qt Multimedia Widgets | 用于实现多媒体功能的基于小部件的类。 |
Qt Network | 使网络编程更简单、更便携的类。 |
Qt QML | QML和JavaScript语言的类。 |
Qt Quick | 用于构建具有自定义用户界面的高度动态应用程序的声明性框架。 |
Qt Quick Controls | 提供轻量级 QML 类型,用于为桌面、嵌入式和移动设备创建高性能用户界面。这些类型采用简单的样式体系结构,并且非常高效。 |
Qt Quick Dialogs | 用于从Qt Quick应用程序创建系统对话框并与之交互的类型。 |
Qt Quick Layouts | 布局是用于在用户界面中排列基于Qt Quick 2的项目。 |
Qt Quick Test | QML应用程序的单元测试框架,其中测试用例被编写为JavaScript函数。 注意: 二进制兼容性保证不适用于Qt快速测试。但是,它将保持源兼容。 |
Qt SQL | 使用 SQL 进行数据库集成的类。 |
Qt Test | 用于单元测试Qt应用程序和库的类。 注意: 二进制兼容性保证不适用于Qt测试。但是,它将保持源兼容。 |
Qt Widgets | 使用C++小部件扩展Qt GUI的类。 |
4. main.cpp 文件
main.cpp 为本界面程序的源文件
#include "mainwindow.h"
#include <QApplication>
/* @Description: 程序的主函数,或称之为程序的入口
* @param argc - 代表命令行的参数个数
* @param argv - 代表命令行参数具体内容
*/
int main(int argc, char *argv[])
{
// QGuiApplication a(argc, argv) ,管理Qt程序的运行,和设置Qt应用程序,针对非QWidget应用程序,比如QQuick
// QCoreApplication a(argc, argv), 管理Qt程序的运行,和设置Qt应用程序,针对无界面的应用程序
// QApplication a(argc, argv), 管理Qt程序的运行,和设置Qt应用程序,针对QWidget应用程序
QApplication a(argc, argv);
// MainWindow 是我们之前创建工程时定义的类(起的类名),w是创建的对象
MainWindow w;
// w对象调用了show()方法
w.show();
//事件循环,QEventLoop: :exec(),等待鼠标或键盘的输入
return a.exec();
}
5. mainwindow.h 文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
// 槽函数的宏定义
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
6. mainwindow.cpp 文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
/* 构造函数 */
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow) //此处的 ui 使用了 C++ 的初始化列表,等价于 ui = new Ui::MainWindow
{
ui->setupUi(this);
}
/* 析构函数 */
MainWindow::~MainWindow()
{
delete ui;
}
更多推荐
所有评论(0)