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

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499


  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页
目次
工程配置
代码视图
配置文件
核心代码


工程配置




  • New Project



  • QT Widgets Application



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



  • QMAKE



  • Weight



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



  • 选择开发情况



代码视图

配置文件

  1. # 添加 Qt 模块 core 和 gui
  2. QT       += core gui
  3. # 如果 Qt 的主版本号大于 4,添加 widgets 模块
  4. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  5. # 配置项目使用 C++17 标准
  6. CONFIG += c++17
  7. # 您可以使您的代码在使用弃用的 API 时无法编译。
  8. # 为了做到这一点,取消注释以下行。
  9. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # 禁用在 Qt 6.0.0 之前被弃用的所有 API
  10. # 指定项目的源文件列表
  11. SOURCES += \
  12.     main.cpp \
  13.     widget.cpp
  14. # 指定项目的头文件列表
  15. HEADERS += \
  16.     widget.h
  17. # 部署的默认规则。
  18. # 目标路径在 QNX 系统上是 `/tmp/$${TARGET}/bin`
  19. qnx: target.path = /tmp/$${TARGET}/bin
  20. # 目标路径在非 android 的 Unix 系统上是 `/opt/$${TARGET}/bin`
  21. else: unix:!android: target.path = /opt/$${TARGET}/bin
  22. # 如果 target.path 不为空,将其添加到 INSTALLS 变量中
  23. !isEmpty(target.path): INSTALLS += target
复制代码


  • QT += core gui:

    • 作用:告诉 qmake 该项目依赖 core 和 gui 模块。
    • 影响: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 变量中。
    • 影响:定义了安装目标路径,使项目可以摆设到指定路径。

 
核心代码

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. // 包含 QWidget 类的头文件
  4. #include <QWidget>
  5. // 定义一个名为 Widget 的类,继承自 QWidget
  6. class Widget : public QWidget
  7. {
  8.     // Q_OBJECT 宏,用于启用 Qt 的元对象系统,包括信号和槽机制
  9.     Q_OBJECT
  10. public:
  11.     // 构造函数,接受一个 QWidget 类型的指针作为父对象,默认为 nullptr
  12.     Widget(QWidget *parent = nullptr);
  13.     // 析构函数
  14.     ~Widget();
  15. };
  16. #endif // WIDGET_H
  17. // 包含 widget.h 头文件,以便实现 Widget 类
  18. #include "widget.h"
  19. // Widget 类的构造函数实现
  20. Widget::Widget(QWidget *parent)
  21.     : QWidget(parent) // 调用基类 QWidget 的构造函数,传递父对象
  22. {}
  23. // Widget 类的析构函数实现
  24. Widget::~Widget() {}
  25. // 包含 widget.h 头文件,以便使用 Widget 类
  26. #include "widget.h"
  27. // 包含 QApplication 类的头文件
  28. #include <QApplication>
  29. // 主函数,程序的入口点
  30. int main(int argc, char *argv[])
  31. {
  32.     // 创建一个 QApplication 对象,管理应用程序的资源和事件循环
  33.     QApplication a(argc, argv);
  34.     // 创建一个 Widget 对象,默认没有父对象
  35.     Widget w;
  36.     // 显示 Widget 窗口
  37.     w.show();
  38.     // 进入应用程序的主事件循环,直到调用 exit() 函数
  39.     return a.exec();
  40. }
复制代码


  • widget.h 文件

    • 使用 #ifndef, #define, #endif 宏防止头文件重复包含。
    • 包含 QWidget 头文件,定义一个继续自 QWidget 的 Widget 类。
    • 使用 Q_OBJECT 宏启用 Qt 的元对象系统。
    • 声明 Widget 类的构造函数和析构函数。

  • main.cpp 文件

    • 包含 widget.h 和 QApplication 头文件。
    • 在 main 函数中创建 QApplication 对象,管理应用程序的资源和事件循环。
    • 创建 Widget 对象并表现它。
    • 调用 QApplication::exec() 进入主事件循环,直到应用程序退出。

  • widget.cpp 文件

    • 包含 widget.h 头文件。
    • 实现 Widget 类的构造函数和析构函数。

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表