qt

1.窗口

1.src/main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <QApplication>
#include <QDebug>
#include <QWidget>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *hw = new QWidget(); //main GUI window
hw->show(); //hw is the real window

return a.exec();
}

2.动态链接

CMakelists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cmake_minimum_required(VERSION 3.24.0)

# 设置项目名称和版本
project(MyQtApp VERSION 0.1 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
#系统变量中没有Qt目录需要添加此句
set(CMAKE_PREFIX_PATH "C:\\D\\Program\\Qt\\6.9.0\\mingw_64")
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 查找 Qt 6 包
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加可执行文件

aux_source_directory(./src srcs)
add_executable(${PROJECT_NAME}
#WIN32 # If you need a terminal for debug, please comment this statement
${srcs}
)

# 输出到项目下的 bin 文件夹
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")

# 链接 Qt 库
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets)

build_mingw.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

# 1. 强力清理旧的构建目录
# 如果目录被占用会报错,所以加上判断
if [ -d "build" ]; then
echo "--- 正在清理旧的构建目录 ---"
rm -rf build
fi

mkdir build
cd build

# 2. 配置项目
# 针对 MinGW 的核心修正:
# -DCMAKE_SH=OFF 用于防止 CMake 在检测到 Git Bash 的 sh.exe 时产生冲突
echo "--- 正在配置项目 (MinGW) ---"
cmake -G "MinGW Makefiles" \
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_SH=OFF \
-DCMAKE_BUILD_TYPE=Release ..

# 3. 执行构建
# --parallel 8 (或 -j8) 可以显著加快编译速度
echo "--- 正在编译项目 ---"
cmake --build . --parallel 8

echo "--- 编译完成! ---"

2.静态链接

CMakelists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
cmake_minimum_required(VERSION 3.16)
project(MyQtApp LANGUAGES C CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_PREFIX_PATH "C:\\D\\Program\\Qt\\6.2.4\\MSVC2022_x64_static_624_Release")

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Force x64 build
set(CMAKE_GENERATOR_PLATFORM x64)
set(CMAKE_GENERATOR_TOOLSET host=x64)

# Force Release build
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CONFIGURATION_TYPES Release)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)

aux_source_directory(./src srcs)
add_executable(${PROJECT_NAME}
WIN32 # If you need a terminal for debug, please comment this statement
${srcs}
)
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")

target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets)
# Add static build settings

target_compile_definitions(${PROJECT_NAME} PRIVATE
QT_STATICPLUGIN
QT_NO_DEBUG
NDEBUG
)

build_msvc.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash

# 1. 检查并清理构建目录
if [ -d "build" ]; then
echo "清理旧的构建目录..."
rm -rf build
fi
mkdir build
cd build

# 2. 配置项目
# -A x64 指定生成 64 位程序
# 如果你安装了多个 VS 版本,建议显式指定 -G "Visual Studio 17 2022"
echo "正在使用 MSVC 配置项目..."
cmake .. -G "Visual Studio 17 2022" -A x64

# 3. 构建项目
# MSVC 是多配置生成器,所以必须指定 --config Release
echo "正在编译 (Release 模式)..."
cmake --build . --config Release -j8

# 4. (可选) 自动部署 Qt 依赖
# 注意:即使你用 MSVC 编译,也要用 MSVC 版本的 windeployqt
# C:/path/to/msvc_64/bin/windeployqt.exe ../bin/MyQtApp.exe

echo "构建完成!"