在VSCode中借助AI豐富C++Qt應用程序

隨著國內外各類自動化編程助手的普及,作為傳統桌面C++開發者,也要及時地用上這樣強大的工具。考慮到網速問題,國外的服務時斷時續,還是傾向于使用一些國產的大語言模型助手。我們今天就來看看在VSCode下使用大語言模型輔助Qt開發。

1. 用好QtCreator + VSCode組合

VSCode成為AI助手最先支持的代碼編輯器,也是AI插件最豐富的編輯器之一。我以前用的很少,主要用QtCreator。最近用了一下,感覺有必要引入我的工具鏈條內,作為QtCreator/VS的助手來用。

1.1 VSCode 是最先一批支持流暢AI體驗的編輯器

之所以能做到最先一批,是因為他的 開源特性——在過去十年中一直是GitHub上最成功的開源項目之一。開源使得開發者能夠深入了解編輯器的內部機制,方便進行集成和定制。另一方面,和VS、QtCreator相比,它的 可擴展性 更聚焦:作為編輯器的定位,使得它比較聚焦于代碼的錄入(而不是連著GUI繪制都要管),這使得為它開發AI助手,比為復雜的IDE開發更清晰明了。最重要的,是它語言支持豐富。既然是代碼編輯器,主要是敲代碼的,那就不需要做編譯器、GUI繪圖工具等特性,自然支持的語言就多了(把工作流甩給插件和程序猿了)。正因如此,行業內逐漸形成了以VSCode為代表的AI用戶體驗。

1.2 VSCode 是很好的Qt項目輔助工具

VSCode寫Qt項目,和IDE提供的功能來說,還是有區別的,我覺得主要區別如下:
首先,集成程度稍差。 C++/Qt傳統集成開發環境是一個一體化的開發軟件服務套。例如Visual Studio、QtCreator等,內置了大量的UI自動化工具,用戶可以通過界面可視化設計菜單、工具欄,并動動鼠標就插入代碼。

auto
上圖就是在Qt的原生IDE下,自動插入信號-槽的代碼。然而,和QtCreator不同,VSCode是一個輕量級的代碼編輯器,默認情況下只提供了基本的代碼編輯功能,如語法高亮、代碼自動完成等。如果要實現編譯、調試等功能,需要安裝相應的插件,且不是“開箱即用”,配置起來,新手還是要找尋一會兒。即使是Python編程,和 Anaconda 旗下幾款IDE相比,某些方面還是有點麻煩。 其次, 普適性與針對性區別顯著。IDE通常針對幾種特定的編譯語言為主,如Java C#、VB。它們針對特定語言進行了優化,除了基本的代碼編輯功能外,還包括編譯器、調試器、圖形用戶界面設計工具、版本控制系統集成等,能夠滿足軟件開發過程中的各種需求。VSCode具有較高的普適性,雖然通過插件可以實現很多功能,但在功能的完整性和深度上可能不如一些專業的IDE,且缺少專門的優化和整合。

總之,我們需要QtCreator作為創建、修改Qt項目的主用工具。由于QtCreator自帶的AI插件是商業許可,我們使用VSCode作為代碼編輯器和注釋生成器使用。這種情況下,可以最大程度發揮AI的能力。

2. 配置VSCode

2.1. 介紹沒有AI情況下筆者的開發環境

由于在使用 VSCode之前,已經安裝了很多Qt常用的前置環境,有必要和大家說一下。

  1. Manjaro Linux SSD作為主用開發環境。
  2. Windows MSYS2 mingw64、ucrt64、Clang32/64、mingw32環境全套 POSIX環境及Qt已經安裝,作為第二開發環境,用來驗證1的代碼跨平臺能力。
  3. Visual Studio 2022 C++/Qt 擴展模塊已經完全具備,用來為VS用戶發布開箱即用的源碼資源——MSYS2和VS有區別,為了讓使用代碼的朋友不會踩坑,也要在VS下編譯運行測試——做好人做到底。
  4. Qt Online Installer + MSVC 2022 Qt6.9。永遠追求最新的版本。如果很慢,請用命令行換源:
Installer/Maintainer.exe --mirror http://mirrors.ustc.edu.cn/qtproject/
  1. Git 2.35已經安裝。

當然,如果只是為了使用AI來給代碼加注釋等功能,或者去讀別人的代碼,則無需安裝Qt的上述環境。只需要配置好 VSCode 即可。然而,若是要能夠在VSCode下編譯、運行、調試 Qt 項目,則建議具備 3、4

Linux下的Code開源版沒有這么麻煩,pacman 或者 apt 默認的Qt、cmake就行了。

2.2 安裝配置 VSCode

首先去官網下載安裝包,而后安裝、啟動。啟動后,直接轉到擴展一欄,搜索“Qt”,并安裝擴展. 注意,安裝VSCode擴展要安裝官方的,即作者是“QtGroup”. 這里,我選取All-in-one的 meta pack “Qt Extension Pack”,默認有四個選項會被安裝。

Qt Externsion Pack
同時,確保CMakeTools安裝了微軟官方的版本:

CMake
最后,安裝一個免費的AI環境,這樣就不會在編碼時卡死。這里選取速度比較快的CodeGeeks(智譜清言)

CodeGeex

2.3 重啟并登入AI賬號

這個AI需要拉起網頁用手機驗證碼登入。從略。登入后,隨便打開一個node.js的批處理文件,就能感受續寫了:
JS

3. 輔助開發Qt CMake項目

作為一個通用性很強的編輯器,VSCode在易用性方面比起Qt的私房菜QtCreator還是要差一些。首次配置,需要點不少鼠標和按鈕。

3.1 確定Qt的位置

需要在擴展配置界面,“QtCore”選擇項里,指定Qt的文件夾。如果你的Qt默認傻瓜化安在C:\Qt,一般不需要這個步驟。否則,就需要手工指定了。
配置Qt路徑

指定后,就會彈出“在某某文件夾找到N個Qt版本”的提示。

3.2 選擇構建工具鏈

完成3.1后,選擇“文件”-“打開文件夾”,選擇要打開的CMake Qt項目,停頓些許后,會彈出工具鏈選擇選項卡。如果沒有彈出,或者選錯了,則直接敲擊 :CMake Sel 即可找到入口重新選擇:

Sel

此時,請注意一定要選取正確的工具鏈,比如我選擇的是倒數第一個。
SearchAKit for cmake
選擇后,CMake自動會運行,如果沒有錯誤,會輸出“done”:
CMake OK
如果出錯了,VSCode會進入CMake調試模式 ,大贊!雖然功能沒有C++調試這么多,但是比起純命令行反復嘗試,還是方便多了。

3.3 構建運行

點擊構建俺就直接編譯了:
build
到了運行環節,還要配置。首先,在運行調試界面,看到的是下圖:

debug

點擊“Create a launch.json file”,會讓選擇調試器,我們要選擇 "CMake Debugger:
cmake

選擇后,會彈出CMake的配置,選擇“{}Qt:Debug with cppvsdbg (windows)”,以對應我們的VC2022 Qt6:
Add lau
上述步驟配置完畢后,就可以調試了。

AI

4. 關于qmake和CMake

可以看到,上述工作是基于CMake做的。VSCode下,對qmake支持的不咋地。如果要支持qmake,需要使用 Visual Studio。Qt選擇同時支持CMake和qmake這兩種構建系統,主要考慮的是大型項目的兼容性。

  • qmake作為Qt傳統的構建工具(自Qt 4時代起),需要保持對現有項目的兼容

  • 近期版本中(如Qt 6),qmake雖然仍是可選方案,但已不再是默認推薦

  • CMake支持跨平臺構建的標準化(符合Kitware的CMake規范)

  • 更完善的第三方庫集成(如通過find_package)

  • 新開發者更熟悉CMake(已成為C++事實標準)

  • 大型項目傾向CMake(如需要集成非Qt組件時)

    這種雙軌制策略反映了Qt在技術創新和用戶習慣之間的平衡,預計未來版本中CMake將逐漸成為主導構建方案,而qmake會進入長期維護狀態。

我們在Visual Studio里,也可以安裝 CodeGeeX擴展,用于輔助開發 Qt qmake項目。需要注意的是,VS里的CodeGeeX的代碼介入度沒有 VSCode高,很多時候是獨立輸出到自己的對話框,需要^V過來。因為這個原因,我們還是推薦 VSCode。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86715.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java八股文——JVM「內存模型篇」

JVM的內存模型介紹一下 面試官您好,您問的“JVM內存模型”,這是一個非常核心的問題。在Java技術體系中,這個術語通常可能指代兩個不同的概念:一個是JVM的運行時數據區,另一個是Java內存模型(JMM&#xff0…

RabbitMQ 高可用與可靠性保障實現

RabbitMQ 高可用與可靠性保障實現詳解 一、高可用架構設計1.1 集群部署模式1.2 鏡像隊列(Mirrored Queue) 二、可靠性保障機制2.1 消息持久化2.2 確認機制(Confirm & Ack)2.3 死信隊列(DLX) 三、容災與…

12.7Swing控件6 JList

在 Java Swing 中,列表框(JList)是用于顯示一組選項的組件,用戶可以從中選擇一個或多個項目。以下是關于 Swing 列表框的詳細介紹: 1. 基本概念與用途 作用:以垂直列表形式展示選項,支持單選或…

C++: condition_variable: wait_for -> unlock_wait_for_lock?

作為C++的初學者,面臨的一個很大的問題,就是很多的概念并不是可以通過名稱直觀的預知它要完成的細節,比如這里的condition_variable的wait_for。C++的設計意圖好像是,我告訴你這樣用,你只要這樣做就行,又簡單還實用!而且需要記住的規則量又大的驚人。最后看起來,更像是…

HTML版英語學習系統

HTML版英語學習系統 這是一個完全免費、無需安裝、功能完整的英語學習工具,使用HTML CSS JavaScript實現。 功能 文本朗讀練習 - 輸入英文文章,系統朗讀幫助練習聽力和發音,適合跟讀練習,模仿學習;實時詞典查詢 - 雙…

【JUC面試篇】Java并發編程高頻八股——線程與多線程

目錄 1. 什么是進程和線程?有什么區別和聯系? 2. Java的線程和操作系統的線程有什么區別? 3. 線程的創建方式有哪些? 4. 如何啟動和停止線程? 5. Java線程的狀態模型(有哪些狀態)? 6. 調用…

LSTM-SVM多變量時序預測(Matlab完整源碼和數據)

LSTM-SVM多變量時序預測(Matlab完整源碼和數據) 目錄 LSTM-SVM多變量時序預測(Matlab完整源碼和數據)效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 代碼主要功能 該代碼實現了一個LSTM-SVM多變量時序預測模型&#xff0c…

ES6——數組擴展之Set數組

在ES6(ECMAScript 2015)中,JavaScript的Set對象提供了一種存儲任何值唯一性的方式,類似于數組但又不需要索引訪問。這對于需要確保元素唯一性的場景非常有用。Set對象本身并不直接提供數組那樣的方法來操作數據(例如ma…

日志收集工具-logstash

提示:Windows 環境下 安裝部署 logstash 采集日志文件 文章目錄 一、下載二、解壓部署三、常用插件四、常用配置 Logstash 服務器數據處理管道,能夠從多個來源采集數據,轉換數據,然后將數據發送到您最喜歡的存儲庫中。Logstash 沒…

6個月Python學習計劃 Day 21 - Python 學習前三周回顧總結

? 第一周:基礎入門與流程控制(Day 1 - 7) “打地基”的一周,我們走完了從變量、輸入輸出、判斷、循環到第一個小型系統的完整鏈路。 📘 學習重點: Python 基礎語法:變量類型、字符串格式化、注…

Spring Boot SQL數據庫功能詳解

Spring Boot自動配置與數據源管理 數據源自動配置機制 當在Spring Boot項目中添加數據庫驅動依賴(如org.postgresql:postgresql)后,應用啟動時自動配置系統會嘗試創建DataSource實現。開發者只需提供基礎連接信息: 數據庫URL格…

java每日精進 6.11【消息隊列】

1.內存級Spring_Event 1.1 控制器層:StringTextController /*** 字符串文本管理控制器* 提供通過消息隊列異步獲取文本信息的接口*/ RestController RequestMapping("/api/string-text") public class StringTextController {Resourceprivate StringTex…

【凌智視覺模塊】rv1106 部署 ppocrv4 檢測模型 rknn 推理

PP-OCRv4 文本框檢測 1. 模型介紹 如有需要可以前往我們的倉庫進行查看 凌智視覺模塊 PP-OCRv4在PP-OCRv3的基礎上進一步升級。整體的框架圖保持了與PP-OCRv3相同的pipeline,針對檢測模型和識別模型進行了數據、網絡結構、訓練策略等多個模塊的優化。 從算法改…

uniapp Vue2 獲取電量的獨家方法:繞過官方插件限制

在使用 uniapp 進行跨平臺應用開發時,獲取設備電量信息是一個常見的需求。然而,uniapp 官方提供的uni.getBatteryInfo方法存在一定的局限性,它不僅需要下載插件,而且目前僅支持 Vue3,這讓使用 Vue2 進行開發的開發者陷…

Go語言中的if else控制語句

if else是Go語言中最基礎也最常用的條件控制語句,用于根據條件執行不同的代碼塊。下面我將詳細介紹Go語言中if else的各種用法和特性。 1. 基本語法 1.1. 最簡單的if語句 if 條件表達式 {// 條件為true時執行的代碼 } 示例: if x > 10 {fmt.Prin…

[Spring]-AOP

AOP場景 AOP: Aspect Oriented Programming (面向切面編程) OOP: Object Oriented Programming (面向對象編程) 場景設計 設計: 編寫一個計算器接口和實現類,提供加減乘除四則運算 需求: 在加減乘除運算的時候需要記錄操作日志(運算前參數、運算后結果)實現方案:…

Web3 借貸與清算機制全解析:鏈上金融的運行邏輯

Web3 借貸與清算機制全解析:鏈上金融的運行邏輯 超額抵押借款 例如,借款人用ETH為抵押借入DAI;借款人的ETH的價值一定是要超過DAI的價值;借款人可以任意自由的使用自己借出的DAI 穩定幣 第一步:借款人需要去提供一定…

RK3588開發筆記-GNSS-RTK模塊調試

目錄 前言 一、什么是GNSS/RTK 二、硬件連接 三、內核配置 四、模塊調試 五、ntripclient使用 總結 前言 在RK3588平臺上集成高精度定位功能是許多工業級應用的需求。本文記錄了我調試GNSS-RTK模塊的全過程,包含硬件連接、驅動移植、數據解析和精度優化等關鍵環節,希望對…

Vue.js $emit的介紹和簡單使用

前言 在 Vue.js 開發中,組件化是核心思想之一。但組件間的通信是一個重要課題,特別是子組件向父組件傳遞數據的場景。Vue 提供了多種通信方式,而$emit正是實現子→父通信的關鍵方法。本文將深入解析$emit的原理、使用場景及最佳實踐。 一、$e…

【Linux 學習計劃】-- 簡易版shell編寫

目錄 思路 創建自己的命令行 獲取用戶命令 分割命令 檢查是否是內建命令 cd命令實現 進程程序替換執行程序 總代碼 結語 思路 int main() {while (1){// 1. 自己的命令行PrintCommandLine();// 2. 獲取用戶命令char command[SIZE];int n GetUserCommand(command, si…