一、安装Qt:
- 官网链接:https://download.qt.io/archive/online_installers/
- 使用镜像:
.\qt-unified-windows-x64-4.6.1-online --mirror https://mirrors.ustc.edu.cn/qtproject
注意,windows下建议使用MSVC编译套件,因为发现有些库只能MSVC才能使用,如QtWebEngine
二、配置环境
以Qt 5.15.2为例,其他同理
1.添加环境变量
- D:\Qt\5.15.2\mingw81_64\bin
- D:\Qt\5.15.2\mingw81_64\lib
将以上路径添加到环境变量中,防止找不到库文件
也可以添加下面两个,方便vscode找到编译套件
- D:\Qt\Tools\mingw810_64\bin
- D:\Qt\Tools\mingw810_64\lib
2.添加编译套件
1、clion配置
2、vscode配置
3、vs2022配置
以Qt 6.5.3为例,其他同理
安装插件:Qt VS Tools
配置插件:添加编译套件
三、添加外部工具和插件
1、clion添加外部工具
qt-designer:
- Program:
D:\Qt\5.15.2\mingw81_64\bin\designer.exe
- Arguments:
$FileName$
- Working directory:
$ProjectFileDir$
- 点击高级选项,勾选:
Synchronize files after execution
和Open console for tool output
- Program:
qt-uic
- Program:
D:\Qt\5.15.2\mingw81_64\bin\uic.exe
- Arguments:
$FileName$ -o ui_$FileNameWithoutExtension$.h
- Working directory:
$FileDir$
- 高级选项同上
- Program:
qt-Assistant
- Program:
D:\Qt\5.15.2\mingw81_64\bin\assistant.exe
- Arguments:
不填
- Working directory:
D:\Qt\5.15.2\mingw81_64\bin
- 高级选项:不做勾选
- Program:
2、vscode安装插件
Qt tools
作者:tonka3000,右键ui
文件可选择打开qt-designer
3、vs2022添加外部工具
右键点击ui文件,选择Open with…,然后点击add添加designer外部工具,argument不用填,选择designer路径添加即可,然后点击Set as Default设置为默认打开方式,以后双击ui文件就能使用Qt Designer打开了
四、cmake使用
1.项目结构
qt-game-example/
├── bin/ # 构建输出目录(可执行文件)
├── CMakeLists.txt # 顶层CMake配置文件
├── main.cpp # 程序入口文件
├── resources/ # 资源文件目录
│ ├── res.qrc # Qt资源文件(包含图片、音乐等)
│ ├── images/ # 图片资源
│ │ └── example.png
│ └── music/ # 音乐资源
│ └── background.mp3
├── core/ # 核心逻辑模块
│ ├── include/ # 头文件
│ │ ├── CoreLogic.h
│ │ └── DataManager.h
│ ├── CoreLogic.cpp
│ ├── DataManager.cpp
│ └── CMakeLists.txt # core模块的CMake配置文件
├── ui/ # 用户界面模块
│ ├── include/ # 头文件
│ │ ├── MainWindow.h
│ │ └── WidgetUtils.h
│ ├── forms/ # Qt UI文件
│ │ └── mainwindow.ui # Qt Designer生成的UI文件
│ ├── MainWindow.cpp
│ ├── WidgetUtils.cpp
│ └── CMakeLists.txt # ui模块的CMake配置文件
├── CMakeCache.txt # CMake缓存(由构建生成)
└── cmake-build-debug/ # 构建目录(由CMake生成)
2.示例CMakeLists.txt文件
以下是基于上述结构生成的CMakeLists.txt文件,包含顶层和子模块的配置。
1. 顶层 CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(qt-game-example)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON) # 自动处理Qt元对象(Q_OBJECT等)
set(CMAKE_AUTORCC ON) # 自动处理Qt资源文件
set(CMAKE_AUTOUIC ON) # 自动处理Qt UI文件
set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/mingw81_64") # Qt安装路径(根据你的环境调整)
set(QRC_SOURCE_FILES ${PROJECT_SOURCE_DIR}/resources/res.qrc)#添加资源文件
#如果 .ui 文件不在源文件目录中,CMake 无法找到它们,就会报错或忽略,CMAKE_AUTOUIC_SEARCH_PATHS 是一个列表变量,
#指定额外的目录路径,告诉 CMake 在这些目录中搜索 .ui 文件,它解决了 .ui 文件与源文件不在同一目录时的查找问题。
set(CMAKE_AUTOUIC_SEARCH_PATHS ${PROJECT_SOURCE_DIR}/ui/forms)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 可执行文件输出目录
# 查找Qt组件
find_package(Qt5 COMPONENTS
Core
Gui
Widgets
REQUIRED
)
include_directories(
${PROJECT_SOURCE_DIR}/core/include
${PROJECT_SOURCE_DIR}/ui/include
)
# 添加子目录
add_subdirectory(core)
add_subdirectory(ui)
# 添加可执行文件
add_executable(${PROJECT_NAME} main.cpp ${QRC_SOURCE_FILES})
# 链接库
target_link_libraries(${PROJECT_NAME}
PRIVATE
core
ui
Qt5::Core
Qt5::Gui
Qt5::Widgets
)
2. core/CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(core)
#收集头文件
file(GLOB HEADER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
# 收集源文件
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC_LIST)
# 创建库
add_library(${PROJECT_NAME} ${SRC_LIST} ${HEADER_SOURCE_FILES})
# 链接Qt核心库
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core)
3. ui/CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(ui)
# 收集UI文件
file(GLOB UI_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/forms/*.ui)
# 收集头文件
file(GLOB HEADER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
# 收集源文件
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC_LIST)
# 创建库
add_library(${PROJECT_NAME} ${SRC_LIST} ${UI_SOURCE_FILES} ${HEADER_SOURCE_FILES})
# 链接Qt库
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Widgets)
五、vs2022额外注意
vs2022在创建带UI的类时,UI文件编译后的类命名可能与其他软件命名的不太一样,如下面的UI类名为TestClass
#pragma once
#include <QMainWindow>
#include "ui_Test.h"
class Test : public QMainWindow
{
Q_OBJECT
public:
Test(QWidget *parent = nullptr);
~Test();
private:
Ui::TestClass ui;
};
如这里,UI文件的类名在后面添加了Class
,而且,成员函数的声明方式也不同,这里没有使用指针声明类成员,跟其他软件的不一样,如Qt Creator
,可以看到,UI类名字与类名相同都是Test
,类成员声明方式是指针,如果没有注意,迁移项目到vs2022可能会导致一些错误。
#ifndef TEST_H
#define TEST_H
#include <QDialog>
namespace Ui
{
class Test;
}
class Test : public QDialog
{
Q_OBJECT
public:
explicit Test(QWidget* parent = nullptr);
~Test();
private:
Ui::Test* ui;
};
#endif // TEST_H
在默认创建的CMakeLists.txt文件也有一些区别,vs2022没有直接添加下面配置
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
而是通过一个qt.cmake文件引入
#CMakeLists.txt内部调用qt.cmake中的配置
qt_standard_project_setup()
#qt.cmake
if(QT_VERSION VERSION_LESS 6.3)
macro(qt_standard_project_setup)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
endmacro()
endif()
if(QT_VERSION VERSION_LESS 6.0)
macro(qt_add_executable name)
if(ANDROID)
add_library(name SHARED ${ARGN})
else()
add_executable(${ARGV})
endif()
endmacro()
endif()
生成的二进制文件命令也不是add_executable
,而是qt_add_executable
qt_add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})
MSBuild构建项目时添加Qt其他模块
项目属性>Qt Project Settings>Qt Modules>Select Mudules
勾选需要的模块,然后点击OK,确定退出项目属性编辑,这样就能添加Qt的其他模块了