----- 基础代码解析 -----


 CMakeLists.txt 
 作用: 
CMake 构建系统的配置文件
用于定义如何编译、链接和构建项目
告诉 CMake 如何生成适合目标平台的构建系统
示例项目名:codeStudy
 
cmake_minimum_required(VERSION 3.19)  #最低 cmake 版本要求
project(codeStudy LANGUAGES CXX)  #项目名称和语言
 
#查找依赖项(QT库、第三方库)
find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets)
 
qt_standard_project_setup()  #调用 QT 的标准项目设置
 
#扩展命令,定义一个 QT 可执行文件项目,并指定相关的资源文件,类似标准的CMake add_executable()
qt_add_executable(codeStudy  #codeStudy 为目标项目名,即生成的程序名
    WIN32 MACOSX_BUNDLE  #目标平台,表示生成的可执行文件是 windows GUI 程序,而不是控制台程序
 
    #项目资源文件
    main.cpp
    widget.cpp
    widget.h
    widget.ui
)
 
#链接 QT 模块
target_link_libraries(codeStudy  #codeStudy 为目标项目名,即生成的程序名
    PRIVATE  #链接作用域
        Qt::Core  #要链接的 QT 模块
        Qt::Widgets  #要链接的 QT 模块
)
 
#引入 GNU 安装目录变量,使安装路口标准化,提高跨平台兼容性
include(GNUInstallDirs)
 
#CMake 安装规则
install(TARGETS codeStudy  #指定安装的目标文件
    BUNDLE  DESTINATION .
        #BUNDLE 用于macOS 的应用程序包
        #“.”表示安装到当前目录
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
        #RUNTIME 指定可执行文件的安装路径(exe.linux/macos的二进制文件)
        #DESTINATION ${CMAKE_INSTALL_BINDIR} 表示安装到变量指定的目录
        #CMAKE_INSTALL_BINDIR 路径的变量
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}  #指定动态库的安装路径
)
    #如果要自定义安装路径,在运行cmake时设置 CMAKE_INSTALL_PREFIX,例:“cmake -DCMAKE_INSTALL_PREFIX=/custom/install/path ..”
 
#自动生成一个部署脚本,用于收集 QT 应用程序依赖的文件
qt_generate_deploy_app_script(
    TARGET codeStudy
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})  #安装过程中 ​执行一个自定义脚本​(自动生成的 deploy_script )
 



 widget.h 
示例项目名:codeStudy
//头文件保护宏
#ifndef WIDGET_H  //如果 WIDGET_H 这个宏还没有被定义
#define WIDGET_H  //就定义它
 
#include < QWidget>
 
//QT 提供的宏,用于包裹命名空间
QT_BEGIN_NAMESPACE  //命名空间开始
namespace Ui {
class Widget;  //前向声明,表示ui命名空间下有一个Widget类
}
QT_END_NAMESPACE  //命名空间结束
 
//定义 Widget 类,公开继承自 QWidget,意味着 Widget 是一个窗口部件
class Widget : public QWidget
{
    Q_OBJECT
        //宏,为类启用了元对象系统,包括信号和槽机制,QObject 的属性系统,运行时类型信息(RTTI)
        //只有声明了 Q_Object 的类才能使用信号和槽机制
 
    public:  //声明构造函数和析构函数,公共成员
        Widget(QWidget *parent = nullptr);  //构造函数
        ~Widget();  //析构函数,在对象销毁时被调用,用于释放资源
 
    private slots:  //声明槽函数
 
    private:  //声明私有成员变量,表示其下的成员只能在该类内部访问,外部代码无法直接访问
        Ui::Widget *ui;  //
 
}
#endif // WIDGET_H  //头文件保护宏,结束条件编译



 widget.cpp 
示例项目名:codeStudy
#include "widget.h"
#include "ui_widget.h"
 
//构造函数
Widget::Widget(QWidget *parent)  // 
    : QWidget(parent)  // 
    , ui(new Ui::Widget)  // 
{
    ui->setupUi(this);  // 
}
 
//析构函数
Widget::~Widget()  // 
{
    delete ui;  // 
}



 main.cpp 
示例项目名:codeStudy
#include "widget.h"
#include 
 
//构造函数
int main(int argc, char *argv[])  // 
{
    QApplication a(argc, argv);  //创建QApplication 对象,管理应用程序的控制流和主要设置
    Widget w;  //创建类名Widget的主窗口对象
    w.show();  //显示主窗口
    return a.exec();  //进入程序后的主事件循环,等待用户交互
}