• 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()
    
    • 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
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    3.运行测试

    效果如下(示例):

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

    总结

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

     set(CMAKE_WIN32_EXECUTABLE ON)
    
    • 1

    或者这样

    add_executable(robokit
            WIN32
            ${QT_RESOURCES_FILES}
            ${QT_MOC_FILES}
            ${QT_FORMS_FILES}
            ${PROJECT_SOURCES}
        )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

  • 相关阅读:
    以酒为媒、以酒载道,五粮液携手首届“金熊猫奖”,讲好中国白酒故事
    GStreamer 进阶
    程序环境和预处理
    jsp当前页面刷新重载并带参数
    Linux——基础指令
    macOs Ventura 13自动开机关机设置教程(命令行)
    如何利用Web Components提高前端开发效率?
    Spark中宽依赖、窄依赖、Job执行流程
    d的位域啊
    jfinal中如何使用过滤器监控Druid监听SQL执行?
  • 原文地址:https://blog.csdn.net/haohaohaihuai/article/details/133359765