VSCode 上部署 Qt6 开发环境
1. 前言
-
模板使用 cmake 与 ninja 构建项目,需要将二者添加到环境变量
-
模板使用 mingw64 编译项目,不需要添加到环境变量,使用临时环境变量以避免冲突
-
将 c_cpp_properties.json、launch.json、settings.json 三个文件中的编译器路径和动态库路径替换为自己的电脑环境中的实际路径即可
2. 项目结构
project:.
│——.gitignore
│——CMakeLists.txt
│——main.cpp
│——qt6-mingw-x64.cmake
│——readme.md
└─.vscode
│——c_cpp_properties.json
│——launch.json
│——settings.json
└─ tasks.json
3. vscode 项目配置
.vscode/c_cpp_properties.json
{
"configurations": [
{
"name": "Qt6.4.1",
"includePath": [
"${workspaceFolder}/**",
"D:/Qt6/6.4.1/mingw_64/include",
"D:/Qt6/6.4.1/mingw_64/include/ActiveQt",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DAnimation",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DCore",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DExtras",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DInput",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DLogic",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DQuick",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickAnimation",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickExtras",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickInput",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickRender",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickScene2D",
"D:/Qt6/6.4.1/mingw_64/include/Qt3DRender",
"D:/Qt6/6.4.1/mingw_64/include/QtAxBase",
"D:/Qt6/6.4.1/mingw_64/include/QtAxContainer",
"D:/Qt6/6.4.1/mingw_64/include/QtAxServer",
"D:/Qt6/6.4.1/mingw_64/include/QtBluetooth",
"D:/Qt6/6.4.1/mingw_64/include/QtBodymovin",
"D:/Qt6/6.4.1/mingw_64/include/QtCharts",
"D:/Qt6/6.4.1/mingw_64/include/QtChartsQml",
"D:/Qt6/6.4.1/mingw_64/include/QtConcurrent",
"D:/Qt6/6.4.1/mingw_64/include/QtCore",
"D:/Qt6/6.4.1/mingw_64/include/QtCore5Compat",
"D:/Qt6/6.4.1/mingw_64/include/QtDataVisualization",
"D:/Qt6/6.4.1/mingw_64/include/QtDataVisualizationQml",
"D:/Qt6/6.4.1/mingw_64/include/QtDBus",
"D:/Qt6/6.4.1/mingw_64/include/QtDesigner",
"D:/Qt6/6.4.1/mingw_64/include/QtDesignerComponents",
"D:/Qt6/6.4.1/mingw_64/include/QtDeviceDiscoverySupport",
"D:/Qt6/6.4.1/mingw_64/include/QtFbSupport",
"D:/Qt6/6.4.1/mingw_64/include/QtFreetype",
"D:/Qt6/6.4.1/mingw_64/include/QtGui",
"D:/Qt6/6.4.1/mingw_64/include/QtHarfbuzz",
"D:/Qt6/6.4.1/mingw_64/include/QtHelp",
"D:/Qt6/6.4.1/mingw_64/include/QtHttpServer",
"D:/Qt6/6.4.1/mingw_64/include/QtJpeg",
"D:/Qt6/6.4.1/mingw_64/include/QtJsonRpc",
"D:/Qt6/6.4.1/mingw_64/include/QtLabsAnimation",
"D:/Qt6/6.4.1/mingw_64/include/QtLabsFolderListModel",
"D:/Qt6/6.4.1/mingw_64/include/QtLabsQmlModels",
"D:/Qt6/6.4.1/mingw_64/include/QtLabsSettings",
"D:/Qt6/6.4.1/mingw_64/include/QtLabsSharedImage",
"D:/Qt6/6.4.1/mingw_64/include/QtLabsWavefrontMesh",
"D:/Qt6/6.4.1/mingw_64/include/QtLanguageServer",
"D:/Qt6/6.4.1/mingw_64/include/QtMultimedia",
"D:/Qt6/6.4.1/mingw_64/include/QtMultimediaQuick",
"D:/Qt6/6.4.1/mingw_64/include/QtMultimediaWidgets",
"D:/Qt6/6.4.1/mingw_64/include/QtNetwork",
"D:/Qt6/6.4.1/mingw_64/include/QtNetworkAuth",
"D:/Qt6/6.4.1/mingw_64/include/QtNfc",
"D:/Qt6/6.4.1/mingw_64/include/QtOpenGL",
"D:/Qt6/6.4.1/mingw_64/include/QtOpenGLWidgets",
"D:/Qt6/6.4.1/mingw_64/include/QtPacketProtocol",
"D:/Qt6/6.4.1/mingw_64/include/QtPng",
"D:/Qt6/6.4.1/mingw_64/include/QtPositioning",
"D:/Qt6/6.4.1/mingw_64/include/QtPositioningQuick",
"D:/Qt6/6.4.1/mingw_64/include/QtPrintSupport",
"D:/Qt6/6.4.1/mingw_64/include/QtQml",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlCompiler",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlCore",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlDebug",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlDom",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlIntegration",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlLocalStorage",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlModels",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlWorkerScript",
"D:/Qt6/6.4.1/mingw_64/include/QtQmlXmlListModel",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3D",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DAssetImport",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DAssetUtils",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DGlslParser",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DHelpers",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DIblBaker",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DParticles",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DPhysics",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DPhysicsHelpers",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DRuntimeRender",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DSpatialAudio",
"D:/Qt6/6.4.1/mingw_64/include/QtQuick3DUtils",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickControls2",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickControls2Impl",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickControlsTestUtils",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickDialogs2",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickDialogs2QuickImpl",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickDialogs2Utils",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickLayouts",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickParticles",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickShapes",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickTemplates2",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickTest",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickTestUtils",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickTimeline",
"D:/Qt6/6.4.1/mingw_64/include/QtQuickWidgets",
"D:/Qt6/6.4.1/mingw_64/include/QtRemoteObjects",
"D:/Qt6/6.4.1/mingw_64/include/QtRemoteObjectsQml",
"D:/Qt6/6.4.1/mingw_64/include/QtRepParser",
"D:/Qt6/6.4.1/mingw_64/include/QtScxml",
"D:/Qt6/6.4.1/mingw_64/include/QtScxmlQml",
"D:/Qt6/6.4.1/mingw_64/include/QtSensors",
"D:/Qt6/6.4.1/mingw_64/include/QtSensorsQuick",
"D:/Qt6/6.4.1/mingw_64/include/QtSerialBus",
"D:/Qt6/6.4.1/mingw_64/include/QtSerialPort",
"D:/Qt6/6.4.1/mingw_64/include/QtShaderTools",
"D:/Qt6/6.4.1/mingw_64/include/QtSpatialAudio",
"D:/Qt6/6.4.1/mingw_64/include/QtSql",
"D:/Qt6/6.4.1/mingw_64/include/QtStateMachine",
"D:/Qt6/6.4.1/mingw_64/include/QtStateMachineQml",
"D:/Qt6/6.4.1/mingw_64/include/QtSvg",
"D:/Qt6/6.4.1/mingw_64/include/QtSvgWidgets",
"D:/Qt6/6.4.1/mingw_64/include/QtTest",
"D:/Qt6/6.4.1/mingw_64/include/QtTextToSpeech",
"D:/Qt6/6.4.1/mingw_64/include/QtTools",
"D:/Qt6/6.4.1/mingw_64/include/QtUiPlugin",
"D:/Qt6/6.4.1/mingw_64/include/QtUiTools",
"D:/Qt6/6.4.1/mingw_64/include/QtVirtualKeyboard",
"D:/Qt6/6.4.1/mingw_64/include/QtWebChannel",
"D:/Qt6/6.4.1/mingw_64/include/QtWebSockets",
"D:/Qt6/6.4.1/mingw_64/include/QtWebView",
"D:/Qt6/6.4.1/mingw_64/include/QtWebViewQuick",
"D:/Qt6/6.4.1/mingw_64/include/QtWidgets",
"D:/Qt6/6.4.1/mingw_64/include/QtXml",
"D:/Qt6/6.4.1/mingw_64/include/QtZlib",
"D:/Qt6/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++",
"D:/Qt6/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/x86_64-w64-mingw32"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64",
"compilerPath": "D:/Qt6/Tools/mingw1120_64/bin/g++.exe"
}
],
"version": 4
}
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:/Qt6/Tools/mingw1120_64/bin/gdb.exe",
"preLaunchTask": "build"
}
]
}
.vscode/settings.json
{
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"env": {
"PATH": "${env:path}D:/Qt6/6.4.1/mingw_64/bin;D:/Qt6/Tools/mingw1120_64/bin"
}
},
"Command Prompt": null,
"Git Bash": null
}
}
.vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "generate",
"type": "shell",
"command": "cmake",
"args": [
"-S",
".",
"-B",
"build",
"-G",
"Ninja"
]
},
{
"label": "build",
"type": "shell",
"dependsOn": "generate",
"command": "cmake",
"args": [
"--build",
"build"
]
}
]
}
4. cmake 脚本
CMakeLists.txt
#Reference:
# https://doc.qt.io/qt-6/cmake-get-started.html
cmake_minimum_required(VERSION 3.20)
set(CMAKE_TOOLCHAIN_FILE qt6-mingw-x64.cmake)
project(main VERSION 1.0.0 LANGUAGES CXX)
# 查找 Qt6 的模块
find_package(Qt6 REQUIRED COMPONENTS Widgets)
qt_standard_project_setup()
aux_source_directory(. PROJECT_SRC_LIST)
add_executable(${PROJECT_NAME} ${PROJECT_SRC_LIST})
target_link_libraries(${PROJECT_NAME}
PRIVATE Qt6::Widgets
)
# 发布程序时不创建控制台窗口
if(CMAKE_BUILD_TYPE STREQUAL Release)
set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE ON)
endif()
# 将需要的动态库拷贝到输出目录
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD COMMAND ${QT6_WINDEPLOY} --no-translations
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.exe)
qt6-mingw-x64.cmake
# string(REGEX REPLACE ".*/\(.*\)" "\\1" CURDIR ${CMAKE_CURRENT_SOURCE_DIR})
message(STATUS USING_TOOLCHAIN:${CMAKE_TOOLCHAIN_FILE})
# flags
# set(DBGFLG "-gdwarf-2 -Og")
# set(LIBFLG "-lc -lm -lnosys")
set(LINKFLG "-Wl,-Map=target.map,--cref -Wl,--gc-sections")
set(PROJECT_FLAGS "-Wall -Wshadow -fdata-sections -ffunction-sections")
# compiler
set(CMAKE_ASM_COMPILER gcc.exe) # -x assembler-with-cpp
set(CMAKE_ASM_FLAGS_DEBUG "${PROJECT_FLAGS} ${DBGFLG}")
set(CMAKE_ASM_FLAGS_RELEASE "${PROJECT_FLAGS} -O3")
set(CMAKE_C_COMPILER gcc.exe)
set(CMAKE_C_FLAGS_DEBUG "${PROJECT_FLAGS} ${DBGFLG}")
set(CMAKE_C_FLAGS_RELEASE "${PROJECT_FLAGS} -O3")
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_COMPILER g++.exe)
set(CMAKE_CXX_FLAGS_DEBUG "${PROJECT_FLAGS} ${DBGFLG}")
set(CMAKE_CXX_FLAGS_RELEASE "${PROJECT_FLAGS} -O3")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXE_LINKER_FLAGS "${LIBFLG} ${LINKFLG}")
# other tools
set(QT6_WINDEPLOY windeployqt.exe)
set(CMAKE_OBJCOPY objcopy.exe)
set(CMAKE_OBJDUMP objdump.exe)
set(CMAKE_SIZE size.exe)
set(CMAKE_DEBUGER gdb.exe)
set(CMAKE_CPPFILT c++filt.exe)
# output type and destination
set(CMAKE_BUILD_TYPE Debug)
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
5. 程序入口
main.cpp
#include <qapplication.h>
#include <qmainwindow.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow main;
main.show();
return app.exec();
}
6. 完整项目
本文来自博客园,作者:尽千帆,转载请注明原文链接:https://www.cnblogs.com/lonelyraft/p/vscode_qt6.html
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)