一、安装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
- qt-uic
- Program:
D:\Qt\5.15.2\mingw81_64\bin\uic.exe
- Arguments:
$FileName$ -o ui_$FileNameWithoutExtension$.h
- Working directory:
$FileDir$
- 高级选项同上
- qt-Assistant
- Program:
D:\Qt\5.15.2\mingw81_64\bin\assistant.exe
- Arguments:
不填
- Working directory:
D:\Qt\5.15.2\mingw81_64\bin
- 高级选项:不做勾选
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.项目结构
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
| qt-game-example/ ├── bin/ ├── CMakeLists.txt ├── main.cpp ├── resources/ │ ├── res.qrc │ ├── images/ │ │ └── example.png │ └── music/ │ └── background.mp3 ├── core/ │ ├── include/ │ │ ├── CoreLogic.h │ │ └── DataManager.h │ ├── CoreLogic.cpp │ ├── DataManager.cpp │ └── CMakeLists.txt ├── ui/ │ ├── include/ │ │ ├── MainWindow.h │ │ └── WidgetUtils.h │ ├── forms/ │ │ └── mainwindow.ui │ ├── MainWindow.cpp │ ├── WidgetUtils.cpp │ └── CMakeLists.txt ├── CMakeCache.txt └── cmake-build-debug/
|
2.示例CMakeLists.txt文件
以下是基于上述结构生成的CMakeLists.txt文件,包含顶层和子模块的配置。
1. 顶层 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 41 42 43 44 45 46
| cmake_minimum_required(VERSION 3.28) project(qt-game-example)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/mingw81_64") set(QRC_SOURCE_FILES ${PROJECT_SOURCE_DIR}/resources/res.qrc)
set(CMAKE_AUTOUIC_SEARCH_PATHS ${PROJECT_SOURCE_DIR}/ui/forms)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
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
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core)
|
3. ui/CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cmake_minimum_required(VERSION 3.28) project(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})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Widgets)
|
五、vs2022额外注意
vs2022在创建带UI的类时,UI文件编译后的类命名可能与其他软件命名的不太一样,如下面的UI类名为TestClass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #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可能会导致一些错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #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
|
在默认创建的CMakeLists.txt文件也有一些区别,vs2022没有直接添加下面配置
1 2 3
| set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON)
|
而是通过一个qt.cmake文件引入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #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
1
| qt_add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})
|
MSBuild构建项目时添加Qt其他模块
项目属性>Qt Project Settings>Qt Modules>Select Mudules

勾选需要的模块,然后点击OK,确定退出项目属性编辑,这样就能添加Qt的其他模块了
