环境
- os: win11
- cmake: 最新即可
- vscode:最新即可
- visual studio:2022最新(支持MSCV2019+QT)
- qt: qt5.15.2(LTS)
- 其他vscode c++辅助开发插件, 我的插件列表
Cmake:CMake使用总结 - 掘金 (juejin.cn)
Qt下载安装,Qt5.14后的版本需要在线下载安装,需要注册一个Qt账号
- 参考:(39条消息) QT5.15.2在线安装教程(详细图文)_Qi_1337的博客-CSDN博客_qt5.15.2安装
- 勾选可以参考,我这里没有用到安卓以及UWP,只需要MSVC编译器且配合的是VS2022,如果你用的是VS2019则勾选MSVC2015或者MSCV2017具体看你Visual Studio的MSVC版本
安装完Qt后,设置系统环境变量,设置MSCV编译的路径见图
vsCode直接官网下载安装 参考:[VSCode软件的下载安装 - 知乎 (zhihu.com)]
- vsCode:安装插件如下
(zhuanlan.zhihu.com/p/89338990)
visual studio:2022下载安装
参考:Visual Studio 2022安装与使用教程,一次教会你 - 知乎 (zhihu.com)
所有工具安装完毕建议重启电脑,让系统环境变量生效
Qt 项目创建和管理
其中Qt项目创建推荐使用已经写好的项目模板,然后在现有的项目模板上修改 这里我给出一个我常用的模板支持Windows和Linux
- Cmake 管理着Qt常用的库(网络Qt5::NetWork、串口Qt5::SerialPort、XMLQt5::Xml、图表Qt5::DataVisualization等),Qt预言家不用均可以去掉
-
Cmake 管理的项目目录 手动建立好,并且将对应的源码头文件库,拷贝到相应的目录中
-
Cmake+QT模板
# 指定CMake的最低版本
cmake_minimum_required(VERSION 3.5)
# 指定工程名
project(ND-GUI VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 设置Qt工具链的环境变量
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# 设置C++版本
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#设置UIC的查找路径,UIC默认会在引用ui头文件的源代码路径下查找ui文件,而我们的ui文件存放在/ui文件夹下
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_SOURCE_DIR}/ui)
#执行程序生成路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
#头文件
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
# 查找Qt库 这里是其中的关键,如果没配置好bin/mscv的路径可能会找不到,也可能你安装Qt时没勾选安装
find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core Gui Widgets Network SerialPort PrintSupport Xml DataVisualization)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widgets Network SerialPort PrintSupport Xml DataVisualization)
# 将各个文件夹下的所有文件打包
FILE(GLOB ${PROJECT_NAME}_HEADER "include/*.h")
FILE(GLOB ${PROJECT_NAME}_SOURCES "src/*.cpp")
FILE(GLOB ${PROJECT_NAME}_UI "ui/*.ui")
FILE(GLOB ${PROJECT_NAME}_QRC "qrc/*.qrc")
# 将Qt库链接到目标中
if(WIN32)
#设置Windows程序启动默认不需要控制台CMD
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
link_directories(${PROJECT_SOURCE_DIR}/lib)
else()
link_directories(/usr/local/lib)
endif()
#生成执行文件 这里我还链接了一个qrc目录下的rc文件 里面记录了我程序的样式以及图标
#(如果没有可以去掉"qrc/ND-GUI.rc")
add_executable(${PROJECT_NAME} "qrc/ND-GUI.rc" ${${PROJECT_NAME}_QRC} ${${PROJECT_NAME}_UI} ${${PROJECT_NAME}_HEADER} ${${PROJECT_NAME}_SOURCES})
if(WIN32)
target_link_libraries(${PROJECT_NAME}
Qt5::Widgets
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Network
Qt5::SerialPort
Qt5::PrintSupport
Qt5::Xml
Qt5::DataVisualization
)
else()
#Linux的配置大多数需要链接pthread线程库
target_link_libraries(${PROJECT_NAME}
Qt5::Widgets
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Network
Qt5::SerialPort
Qt5::Xml
Qt5::DataVisualization
pthread
)
endif()
#调用预编译器MOC,需要使用 QT5_WRAP_CPP宏
QT5_WRAP_CPP(${PROJECT_NAME}_SOURCE_MOC ${${PROJECT_NAME}_SOURCE})
#使用UIC处理.ui文件
QT5_WRAP_UI(${PROJECT_NAME}_UI_HEADER ${${PROJECT_NAME}_UI})
#使用RCC处理.qrc文件
QT5_ADD_RESOURCES(${PROJECT_NAME}_RCC ${${PROJECT_NAME}_UIC})
# ==================这里使用了Qt的预言家功能,为了实现多国语言翻译,不需要可以去掉===================
# 查找Qt翻译工具
find_package(QT NAMES Qt6 Qt5 COMPONENTS LinguistTools REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS LinguistTools REQUIRED)
# 初始化要使用的列表
set(TS_FILES)
set(QM_FILES)
# 将要生成的翻译文件添加到列表中 这里生成两个ts分别时英文和中文
list(APPEND TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/qrc/english.ts)
list(APPEND TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/qrc/chinese.ts)
# 设置翻译文件的生成路径,如果不指定就会生成在CMakeFiles的目录里
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${PROJECT_SOURCE_DIR}/qrc)
# 创建翻译的最关键一步,这一步会根据源码中带有tr标识的语句识别假如到ts文件中
qt5_create_translation(QM_FILES ${TS_FILES} ${${PROJECT_NAME}_SOURCES})
message("-------------------------打印一下----------------------------")
message(${QM_FILES})
# 添加更新翻译的目标
add_custom_target(lupdate_task DEPENDS ${TS_FILES})
add_custom_target(lrelease_task DEPENDS ${QM_FILES})
# ===============================================================================================
- VSCODE构建项目并启动程序
选择Visual Studio 构建的编译器
windwos打包Qt程序
- 在执行程序目录按住shift+右键 打开powerShell,
- 输入:windeployqt ./ND-GUI 注:我的程序名是(ND-GUI)