Bootstrap

Windows图形界面(GUI)-QT-C/C++ - QT框架解析

目录

工程配置

代码视图

配置文件

核心代码


工程配置

  • New Project

  • QT Widgets Application

  • 涉及到名称输入不要存在中文

  • QMAKE

  • Weight

  • 可以手动指定修改类文件

  • 选择开发环境

代码视图

配置文件
# 添加 Qt 模块 core 和 gui
QT       += core gui

# 如果 Qt 的主版本号大于 4,添加 widgets 模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 配置项目使用 C++17 标准
CONFIG += c++17

# 您可以使您的代码在使用弃用的 API 时无法编译。
# 为了做到这一点,取消注释以下行。
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # 禁用在 Qt 6.0.0 之前被弃用的所有 API

# 指定项目的源文件列表
SOURCES += \
    main.cpp \
    widget.cpp

# 指定项目的头文件列表
HEADERS += \
    widget.h

# 部署的默认规则。
# 目标路径在 QNX 系统上是 `/tmp/$${TARGET}/bin`
qnx: target.path = /tmp/$${TARGET}/bin
# 目标路径在非 android 的 Unix 系统上是 `/opt/$${TARGET}/bin`
else: unix:!android: target.path = /opt/$${TARGET}/bin
# 如果 target.path 不为空,将其添加到 INSTALLS 变量中
!isEmpty(target.path): INSTALLS += target
  • QT += core gui:

    • 作用:告诉 qmake 该项目依赖 coregui 模块。

    • 影响:core 模块包含了 Qt 的核心功能,而 gui 模块包含了图形用户界面相关的功能。

  • greaterThan(QT_MAJOR_VERSION, 4): QT += widgets:

    • 作用:如果 Qt 的主版本号大于 4,则添加 widgets 模块。

    • 影响:widgets 模块包含了用于构建桌面应用程序的窗口小部件类。

  • CONFIG += c++17:

    • 作用:配置项目使用 C++17 标准。

    • 影响:使编译器使用 C++17 标准进行编译,启用 C++17 的新特性。

  • #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000:

    • 作用:这行代码被注释掉了。如果取消注释,它会禁用在 Qt 6.0.0 之前被弃用的所有 API。

    • 影响:如果启用这行,将强制编译器在检测到使用弃用的 API 时报错,有助于代码的前瞻性维护。

  • SOURCES += \ main.cpp \ widget.cpp:

    • 作用:指定项目的源文件列表。

    • 影响:qmake 将这些文件加入到项目中进行编译。

  • HEADERS += \ widget.h:

    • 作用:指定项目的头文件列表。

    • 影响:qmake 将这些头文件包含在项目中。

  • qnx: target.path = /tmp/$${TARGET}/bin:

    • 作用:在 QNX 系统上,设置目标路径为 /tmp/$${TARGET}/bin

    • 影响:定义了在 QNX 系统上部署时的目标路径。

  • else: unix:!android: target.path = /opt/$${TARGET}/bin:

    • 作用:在非 android 的 Unix 系统上,设置目标路径为 /opt/$${TARGET}/bin

    • 影响:定义了在 Unix 系统(排除 Android)上部署时的目标路径。

  • !isEmpty(target.path): INSTALLS += target:

    • 作用:如果 target.path 不为空,则将其添加到 INSTALLS 变量中。

    • 影响:定义了安装目标路径,使项目可以部署到指定路径。

 

核心代码
#ifndef WIDGET_H
#define WIDGET_H

// 包含 QWidget 类的头文件
#include <QWidget>

// 定义一个名为 Widget 的类,继承自 QWidget
class Widget : public QWidget
{
    // Q_OBJECT 宏,用于启用 Qt 的元对象系统,包括信号和槽机制
    Q_OBJECT

public:
    // 构造函数,接受一个 QWidget 类型的指针作为父对象,默认为 nullptr
    Widget(QWidget *parent = nullptr);
    // 析构函数
    ~Widget();
};

#endif // WIDGET_H

// 包含 widget.h 头文件,以便实现 Widget 类
#include "widget.h"

// Widget 类的构造函数实现
Widget::Widget(QWidget *parent)
    : QWidget(parent) // 调用基类 QWidget 的构造函数,传递父对象
{}

// Widget 类的析构函数实现
Widget::~Widget() {}


// 包含 widget.h 头文件,以便使用 Widget 类
#include "widget.h"

// 包含 QApplication 类的头文件
#include <QApplication>

// 主函数,程序的入口点
int main(int argc, char *argv[])
{
    // 创建一个 QApplication 对象,管理应用程序的资源和事件循环
    QApplication a(argc, argv);

    // 创建一个 Widget 对象,默认没有父对象
    Widget w;

    // 显示 Widget 窗口
    w.show();

    // 进入应用程序的主事件循环,直到调用 exit() 函数
    return a.exec();
}
  • widget.h 文件

    • 使用 #ifndef, #define, #endif 宏防止头文件重复包含。

    • 包含 QWidget 头文件,定义一个继承自 QWidgetWidget 类。

    • 使用 Q_OBJECT 宏启用 Qt 的元对象系统。

    • 声明 Widget 类的构造函数和析构函数。

  • main.cpp 文件

    • 包含 widget.hQApplication 头文件。

    • main 函数中创建 QApplication 对象,管理应用程序的资源和事件循环。

    • 创建 Widget 对象并显示它。

    • 调用 QApplication::exec() 进入主事件循环,直到应用程序退出。

  • widget.cpp 文件

    • 包含 widget.h 头文件。

    • 实现 Widget 类的构造函数和析构函数。

      • 构造函数调用基类 QWidget 的构造函数,传递父对象。

;