使用VS Code进行Qt开发的实现

 更新时间:2020年10月20日 09:26:44   作者:海将河推走  
这篇文章主要介绍了使用VS Code进行Qt开发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Qt Creator界面不美观,而VS Code更漂亮一些。

因为Qt5支持使用CMake进行构建,而VS Code也可以支持CMake构建系统,因此是完全可以的。

测试环境

  • Qt 5.15.0
  • CMake 3.17.5
  • Visual Studio 2019 16.7.5(使用C++的桌面开发)
  • Visual Studio Code 1.49.3

步骤

1. 将Qt的bin目录添加到环境变量

假设Qt安装在C:\Qt,那么将C:\Qt\5.15.0\msvc2019_64\bin添加到环境变量。

2. 安装VS Code扩展

在扩展商店搜索c++,安装微软发行的C/C++扩展。

c++

在扩展商店搜索cmake,安装前两个扩展,分别为CMake、CMake Tools。

cmake

3. 使用Qt Creator创建CMake项目

使用Qt Creator创建一个测试项目,如图所示:

creator

4. 在VS Code中打开项目

用VS Code打开CMakeLists.txt文件所在目录,如图所示:

vscode

需要选择一个kit,我是用的是VS 2019的工具包,也可以使用MinGW,具体请参考CMake扩展的官方文档。

提示是否配置智能感知,选择是。

5. 构建并运行项目

F7进行构建:

buildqt

Shift + F5运行:

run

7. 调试项目

添加断点,按下Ctrl + F5进行调试:

debug

一些小问题

上述所有步骤完成后,已经可以正常编码和运行,但智能感知有一点问题,如图:

problem

原因在于Qt生成的ui文件没有被包含到智能感知的include目录中。

查询了CMake文档后发现ui文件所在目录会被添加到目标属性的include目录属性中:

check

但实际验证发现并没有,所以我们还需要手动添加这个属性。

假设生成的目标为Test,在CMakeLists.txt文件的最后一行添加:

target_include_directories(Test PRIVATE "${CMAKE_BINARY_DIR}/Test_autogen/include_Debug")

最终的CMakeLists.txt文件内容为:

cmake_minimum_required(VERSION 3.5)

project(Test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#  set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#  if (ANDROID_ABI STREQUAL "armeabi-v7a")
#    set(ANDROID_EXTRA_LIBS
#      ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#      ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#  endif()
#endif()

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)

if(ANDROID)
 add_library(Test SHARED
  main.cpp
  mainwindow.cpp
  mainwindow.h
  mainwindow.ui
 )
else()
 add_executable(Test
  main.cpp
  mainwindow.cpp
  mainwindow.h
  mainwindow.ui
 )
endif()

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

target_include_directories(Test PRIVATE "${CMAKE_BINARY_DIR}/Test_autogen/include_Debug")

智能感知正常工作:

resolve

到此这篇关于使用VS Code进行Qt开发的实现的文章就介绍到这了,更多相关VSCode Qt开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++中struct和class的区别小结

    c++中struct和class的区别小结

    在C++中,class和struct都是用于定义自定义数据类型的关键字,本文主要介绍了c++中struct和class的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C++ ROS与boost:bind()使用详解

    C++ ROS与boost:bind()使用详解

    boost::bind是标准库函数std::bind1st和std::bind2nd的一种泛化形式,其可以支持函数对象、函数、函数指针、成员函数指针,并且绑定任意参数到某个指定值上或者将输入参数传入任意位置,本文重点介绍下C++ ROS与boost:bind(),感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • C++基于消息队列的多线程实现示例代码

    C++基于消息队列的多线程实现示例代码

    这篇文章主要给大家介绍了关于C++基于消息队列的多线程实现的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • C++ 点(.)和箭头(->)运算符用法小结

    C++ 点(.)和箭头(->)运算符用法小结

    在C++中,点运算符(.)用于访问类的成员变量和成员函数,而箭头运算符(->)用于通过指针访问类的成员变量和成员函数,本文就来详细的介绍一下如何使用,感兴趣的可以了解一下
    2024-01-01
  • C++堆排序算法的实现方法

    C++堆排序算法的实现方法

    这篇文章主要介绍了C++堆排序算法的实现方法,很经典的算法,需要的朋友可以参考下
    2014-08-08
  • C++解决TCP粘包的问题实现

    C++解决TCP粘包的问题实现

    本文主要介绍了C++解决TCP粘包的问题实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • C++ STL标准库之std::list使用介绍及用法详解

    C++ STL标准库之std::list使用介绍及用法详解

    std::list是支持常数时间从容器任何位置插入和移除元素的容器,下面这篇文章主要给大家介绍了关于C++ STL标准库之std::list使用介绍及用法详解的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • QT使用Http协议通信的实现示例

    QT使用Http协议通信的实现示例

    使用QT进行应用开发时,有时候需要进行客户端和服务端的网络通信,本文主要介绍了QT使用Http协议通信的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Matlab绘制花里胡哨的山脊图

    Matlab绘制花里胡哨的山脊图

    这篇文章主要介绍了如何利用Matlab实现绘制一些花里胡哨的山脊图,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下
    2023-02-02
  • c++隐式类型转换存在的问题解析

    c++隐式类型转换存在的问题解析

    隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为,很多时候用户都不知道具体进行了哪些转换,这篇文章主要介绍了c++隐式类型转换存在的陷阱,需要的朋友可以参考下
    2022-03-03

最新评论