windows下使用VS2019 + CMake 进行Qt开发记录


前言

注意:本文讲的是vs2019 + cmake的方式开发Qt程序。

常言道:工欲善其事必先利其器。工具利用的好,事半功倍。
熟悉Qt的人都知道开发Qt程序ide可以使用qtcreator, 在windows下我们还可以选择vs studio进行Qt开发,vs的调试能力确实非同一般,vs+qt方式开发的时候可以安装Qt VS Tool插件,然后就能以.sln工程进行Qt开发。本文不探讨常用的Qt VS Tool插件方式,而是vs + cmake方式。从vs2017 RC开始直接支持cmake工程的开发,这将大大有利于我们去编写跨平台工程。


当然本身qtcreator就支持了cmake工程开发,但是能qtcreator的debug能力很弱,所以才会借助vs开发

一、准备工作

1.安装vs2019以上版本
2.安装cmake(最好3.5以上版本,也可vs勾选安装cmake工具)

二、VS2019 + cmake3.20 + Qt

1.VS2019新建一个cmake工程

选择创建新项目,然后选择CMake项目
在这里插入图片描述


工程结构:
在这里插入图片描述
这里有CMakePresets.json和CMakeUserPresets.json俩个文件, 不用去管它,这个是vs自动生成用来记录平台和设置信息的。

2.修改CMakelist.txt

cmake_minimum_required(VERSION 3.8)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(MSVC)
    #set(CMAKE_WIN32_EXECUTABLE ON)
    set(QT_VERSION_MAJOR 5)
endif()

set(QT_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64")
set(CMAKE_PREFIX_PATH ${QT_PREFIX_PATH})
# set(Qt${QT_VERSION_MAJOR}_DIR "${QT_PREFIX_PATH}/lib/cmake/Qt5")

include_directories(
    ${QT_PREFIX_PATH}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)

find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)

file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} form/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/*.h)
file(GLOB_RECURSE PROJECT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/*.cpp)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    QT6_ADD_RESOURCES(QT_RESOURCES_FILES ${QT_RESOURCES})
    QT6_WRAP_UI(QT_FORMS_FILES ${QT_FORMS})
    QT6_WRAP_CPP(QT_MOC_FILES ${QT_MOC})
    qt_add_executable(robokit
        MANUAL_FINALIZATION
        ${QT_RESOURCES_FILES}
        ${QT_MOC_FILES}
        ${QT_FORMS_FILES}
        ${PROJECT_SOURCES}
    )
else()
    QT5_ADD_RESOURCES(QT_RESOURCES_FILES ${QT_RESOURCES})
    QT5_WRAP_UI(QT_FORMS_FILES ${QT_FORMS})
    QT5_WRAP_CPP(QT_MOC_FILES ${QT_MOC})
    add_executable(robokit
        WIN32
        ${QT_RESOURCES_FILES}
        ${QT_MOC_FILES}
        ${QT_FORMS_FILES}
        ${PROJECT_SOURCES}
    )
endif()

target_link_libraries(robokit PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(robokit)
endif()

3.运行测试

效果如下(示例):

在这里插入图片描述
到这里以后就可以像普通vs工程那样进行打断点调试。

总结

这里还有几个小细节需要注意:
1.点击vs的三角标运行的时候会提示Qt的库找不到,这个时候可以把相关缺少的dll拷贝到执行目录,如:
在这里插入图片描述
2. 运行程序后发现会有一个控制台显示,如果是进行GUI相关程序开发,往往不需要控制台显示,这个时候可以修改CMakeLists.txt加入如下:

 set(CMAKE_WIN32_EXECUTABLE ON)

或者这样

add_executable(robokit
        WIN32
        ${QT_RESOURCES_FILES}
        ${QT_MOC_FILES}
        ${QT_FORMS_FILES}
        ${PROJECT_SOURCES}
    )

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值