qt是一個由qt company開發的跨平臺c++圖形用戶界面應用程序開發框架,本篇文章給大家介紹一下將qt的bin目錄添加到環境變量、安裝vscode擴展、使用vs code進行qt開發、構建并運行項目的方法。
【推薦學習:《vscode》】
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:Qt5.15.0msvc2019_64bin添加到環境變量。
2. 安裝VS Code擴展
在擴展商店搜索c++,安裝微軟發行的C/C++擴展。
在擴展商店搜索cmake,安裝前兩個擴展,分別為CMake、CMake Tools。
3. 使用Qt Creator創建CMake項目
使用Qt Creator創建一個測試項目,如圖所示:
4. 在VS Code中打開項目
用VS Code打開CMakeLists.txt文件所在目錄,如圖所示:
需要選擇一個kit,我是用的是VS 2019的工具包,也可以使用MinGW,具體請參考CMake擴展的官方文檔。
提示是否配置智能感知,選擇是。
5. 構建并運行項目
按F7進行構建:
按Shift + F5運行:
7. 調試項目
添加斷點,按下Ctrl + F5進行調試:
一些小問題
測試后發現如果使用MinGW構建則不會出現下面的問題,而使用Visual C++構建則會出現。
上述所有步驟完成后,已經可以正常編碼和運行,但智能感知有一點問題,如圖:
原因在于Qt生成的ui文件沒有被包含到智能感知的include目錄中。
查詢了CMake文檔后發現ui文件所在目錄會被添加到目標屬性的include目錄屬性中:
但實際驗證發現并沒有,所以我們還需要手動添加這個屬性。
假設生成的目標為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")
智能感知正常工作:
更多編程相關知識,請訪問:vscode!!