CMakeLists.txt
作用:
♦ CMake 构建系统的配置文件
♦ 用于定义如何编译、链接和构建项目
♦ 告诉 CMake 如何生成适合目标平台的构建系统
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
//头文件保护宏
#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
#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
#include "widget.h"
#include
//构造函数
int main(int argc, char *argv[])//
{
QApplication a(argc, argv);//创建QApplication 对象,管理应用程序的控制流和主要设置
Widget w;//创建类名Widget的主窗口对象
w.show();//显示主窗口
return a.exec();//进入程序后的主事件循环,等待用户交互
}