使用CLion+MSVC进行QT6 开发
1.安装vs2019编译环境和QT CMAKE环境
打开vs安装器,选择单个组件,勾选vs2019 C++生成工具和 Spectre缓解库
打开qt maintenance tool 安装MSVC2019并配置环境变量
2.在CLion中配置工具链
1、设置中打开toolchain,增加Visual Studio的环境,选择vs2022的安装目录
3.Cmake中选择刚才配置的工具链
Cmake中将默认的Deubug改为Release
4. 编写相应的CmakeLists.txt文件
cmake_minimum_required(VERSION 3.28)
project(demo3)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "E:/DEV/QT/6.7.2/msvc2019_64") #这里换成当前机器对应的QT MSVC环境所在目录
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} ]] REQUIRED COMPONENTS Widgets LinguistTools)
aux_source_directory(. DIRS_SRCS) #当前文件夹加入cmake
set(SOURCE_FILES
${DIRS_SRCS}
)
set(PROJECT_SOURCES
${SOURCE_FILES}
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(${PROJECT_NAME}
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
if(ANDROID)
add_library(${PROJECT_NAME} SHARED
${PROJECT_SOURCES}
)
else()
add_executable(${PROJECT_NAME}
${PROJECT_SOURCES}
)
endif()
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES} )
endif()
# 链接库文件
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
)
set_target_properties( ${PROJECT_NAME} PROPERTIES
WIN32_EXECUTABLE ON # 去掉注释则保留控制台, 可以看到输出
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(${PROJECT_NAME})
endif()
# 区别debug和release来决定是否去除命令行
if(${CMAKE_CXX_COMPILER} MATCHES ".*/(g\+\+)(\..*)")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
elseif(${CMAKE_CXX_COMPILER} MATCHES ".*/(cl)(\..*)")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
endif()
5、编辑模板文件
Clion打开设置 -> File and code templates,选择QT的CMakeLists.txt模板
cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
project(${PROJECT_NAME})
set(CMAKE_CXX_STANDARD ${CMAKE_LANGUAGE_VERSION})
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#if( ${CMAKE_MAJOR_VERSION} < 3 || ( ${CMAKE_MAJOR_VERSION} == 3 and ${CMAKE_MINOR_VERSION} < 7 ) )
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#end
#if( ${QT_PATH} != "" )
set(CMAKE_PREFIX_PATH "${QT_PATH}") #这里换成当前机器对应的QT MSVC环境所在目录
#end
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt#[[${QT_VERSION_MAJOR} ]]# REQUIRED COMPONENTS Widgets LinguistTools)
aux_source_directory(. DIRS_SRCS) #当前文件夹加入cmake
set(SOURCE_FILES
#[[${DIRS_SRCS}]]#
)
set(PROJECT_SOURCES
#[[${SOURCE_FILES}]]#
)
if(#[[${QT_VERSION_MAJOR}]]# GREATER_EQUAL 6)
qt_add_executable(#[[${PROJECT_NAME}]]#
MANUAL_FINALIZATION
#[[${PROJECT_SOURCES}]]#
)
else()
if(ANDROID)
add_library(#[[${PROJECT_NAME}]]# SHARED
#[[${PROJECT_SOURCES}]]#
)
else()
add_executable(#[[${PROJECT_NAME}]]#
#[[${PROJECT_SOURCES}]]#
)
endif()
qt5_create_translation(QM_FILES #[[${CMAKE_SOURCE_DIR}]]# #[[${TS_FILES}]]# )
endif()
# 链接库文件
target_link_libraries(#[[${PROJECT_NAME}]]# PRIVATE
Qt#[[${QT_VERSION_MAJOR}]]#::Widgets
Qt#[[${QT_VERSION_MAJOR}]]#::Core
Qt#[[${QT_VERSION_MAJOR}]]#::Gui
)
set_target_properties( #[[${PROJECT_NAME}]]# PROPERTIES
WIN32_EXECUTABLE ON # 去掉注释则保留控制台, 可以看到输出
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(#[[${PROJECT_NAME}]]#)
endif()
# 区别debug和release来决定是否去除命令行
if(#[[${CMAKE_CXX_COMPILER}]]# MATCHES ".*/(g\+\+)(\..*)")
set_target_properties(#[[${PROJECT_NAME}]]# PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
elseif(#[[${CMAKE_CXX_COMPILER}]]# MATCHES ".*/(cl)(\..*)")
set_target_properties(#[[${PROJECT_NAME}]]# PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
endif()
6、配置Profile或者配置windows系统环境变量
#如果不进行配置运行程序会报错找不到QT的dll文件
将 [你的QT安装目录]/msvc2019_64/bin 文件夹添加到Clion的profile或者windows环境变量中
使用FluentUI框架
1、下载UI源码
2、自己编译UI库
使用QT Creator进行编译,如果直接用Clion也可以,就是需要自己修改CMakelists文件
3、在新项目中导入库
- 复制include文件夹到新项目中
- 复制编译出来的lib和dll文件到新项目中
- 在新项目中加入这些文件的引用
4、复制dll文件到编译目录中
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD # Adds a post-build event to
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..."
"${PROJECT_SOURCE_DIR}/libs/elawidgettools.dll" # <--this is in-file
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")