Qt Creator + CMake 構建教程

此教程基于:

  • Qt 6.7.4
  • Qt Creator 15.0.1
  • CMake 3.26.4

Qt 6 以下的版本使用 CMake 構建可能會存在一些問題.

目錄

  • 新建窗體工程
  • 更新翻譯
  • 添加資源
  • 軟件部署(Deploy)

此教程描述了如何一步步在 Qt Creator 中使用 CMake 構建應用程序工程. 涉及 新建窗體工程, 更新翻譯, 添加資源, 以及軟件部署等環節.

新建窗體工程

此過程描述如何在Qt Creator中新建一個使用 CMake 構建的窗體應用程序.

  • 運行 Qt Creator, 點擊Welcome頁中的 Create Project... 按鈕.
  • 在新建工程對話框中選擇: Application(Qt) | Qt Widgets Application, 點擊右下角 Choose… 按鈕.

在這里插入圖片描述

  • 設置新建工程的名稱和路徑, 點擊 Next.

在這里插入圖片描述

  • 構建系統選擇: CMake, 點擊 Next.

在這里插入圖片描述

  • 類信息頁不做修改, 點擊 Next.

在這里插入圖片描述

  • 翻譯文件頁, 選擇: Chinese(China), 點擊 Next.

在這里插入圖片描述

  • 點擊 Finish 按鈕, 完成新建工程.

在這里插入圖片描述

  • 新建工程完畢后, 開發界面如下圖所示. 工程的構建, 調試, 運行, 以及編譯套件和編譯配置的切換分別對應圖中的1,2,3,4.

在這里插入圖片描述

  • 這里我們選擇 Desktop_Qt_6_7_3_MSVC2019_64bit.

在這里插入圖片描述

  • 點擊 構建 按鈕, 完成工程的編譯; 點擊 運行 按鈕, 運行示例程序.

更新翻譯

  • 使用 Linguist 打開 helloworld_zh_CN.ts(建議將 .ts 文件的打開方式直接設置為 Linguist)

在這里插入圖片描述

  • 設置 MainWindow 的中文翻譯為: 主窗體, 確認并保存.

在這里插入圖片描述

  • 注釋掉: qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}), 并添加: qt_add_translations(TARGETS helloworld TS_FILES ${TS_FILES}) (helloworld 是此工程的構建目標), 然后保存.

在這里插入圖片描述

  • 切換到Projects 模式頁, 點擊 Add Build Step 工具按鈕, 選擇 CMake Build 菜單.

在這里插入圖片描述- 勾選 update_translations目標, 去除勾選 all目標, 并將此構建步驟向上移動 (或直接修改構建步驟中的第一個)

在這里插入圖片描述

  • 點擊 Build 按鈕, 重新構建. 從編譯輸出窗口中, 可以看到程序的構建過程為:
    1. 更新 helloworld_zh_CN.ts;
    2. 生成 helloworld_zh_CN.qm;
    3. 鏈接生成 helloworld.exe.

在這里插入圖片描述- 點擊 Run按鈕運行此程序, 可以看到主窗體的標題欄已經顯示為中文.

在這里插入圖片描述

添加資源

此過程, 我們將添加一個圖標資源, 并將此圖標設置為主窗體的窗口圖標.

  • 使用資源管理器打開工程所在目錄, 新建名為 images 的文件夾, 并將圖標logo.png放置到此文件夾下.
  • CMakeLists.txt 文件中添加:
 # qt_add_resources(<TARGET> <RESOURCE_NAME> [PREFIX <PATH>] [FILES ...])qt_add_resources(helloworld imageresourcesPREFIX "/"FILES images/logo.png)

其中, FILES參數指定要添加的文件

  • 點擊 Build 按鈕, 完成構建. 此時在工程視圖中可以看到logo.png已添加到工程的資源文件中.

在這里插入圖片描述

  • 修改 MainWindow.cpp, 在其中指定窗體圖標.
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowIcon(QIcon(":/images/logo.png")); // TODO:
}
  • 再次構建, 并運行. 此時窗口圖標已更換為我們指定的圖標文件.

在這里插入圖片描述

軟件部署(Deploy)

構建生成的 helloworld.exe 在目標計算機上運行, 還需要一系列依賴的動態庫. Qt 提供了 qt_generate_deploy_app_script() 命令, 可以方便的打包應用程序所需的運行環境.

  • CMakeLists.txt 中添加以下代碼, 生成部署腳本:
qt_generate_deploy_app_script(TARGET helloworldOUTPUT_SCRIPT deploy_scriptNO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})
  • CMakeLists.txt 中設置安裝目錄前綴 (CMAKE_INSTALL_PREFIX )為 ${PROJECT_BINARY_DIR}/install:
set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install)
  • 切換到工程模式, 添加構建步驟, 設置構建目標為install:

在這里插入圖片描述

  • 點擊Build 按鈕, 完成構建, 在編譯輸出窗口可以看到如下信息:
12:36:02: Starting: "C:\Program Files\CMake\bin\cmake.exe" --build D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug --target install
[0/1 ?/sec] Install the project...
-- Install configuration: "Debug"
-- Writing D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install/bin/qt.conf
-- Running Qt deploy tool for D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/helloworld.exe in working directory 'D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install'
'C:/Qt/6.7.3/msvc2019_64/bin/windeployqt.exe' 'D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/helloworld.exe' '--dir' '.' '--libdir' 'bin' '--plugindir' 'plugins' '--qml-deploy-dir' 'qml' '--translationdir' 'translations' '--force' '--qtpaths' 'C:/Qt/6.7.3/msvc2019_64/bin/qtpaths6.exe'
D:\workspace\qt\helloworld\build\Desktop_Qt_6_7_3_MSVC2019_64bit-Debug\helloworld.exe 64 bit, debug executable
Adding in plugin type generic for module: Qt6Gui
Skipping plugin qinsighttrackerd.dll. Use -deploy-insighttracker if you want to use it.
Adding Qt6Network for qtuiotouchplugind.dll from plugin type: generic
Adding in plugin type iconengines for module: Qt6Gui
Adding Qt6Svg for qsvgicond.dll from plugin type: iconengines
Adding in plugin type imageformats for module: Qt6Gui
Adding Qt6Pdf for qpdfd.dll from plugin type: imageformats
Adding in plugin type networkinformation for module: Qt6Network
Adding in plugin type platforminputcontexts for module: Qt6Gui
Skipping plugin qtvirtualkeyboardplugind.dll due to disabled dependencies (Qt6Qml Qt6Quick).
Adding in plugin type platforms for module: Qt6Gui
Adding in plugin type styles for module: Qt6Widgets
Adding in plugin type tls for module: Qt6Network
Direct dependencies: Qt6Core Qt6Gui Qt6Widgets
All dependencies   : Qt6Core Qt6Gui Qt6Widgets
To be deployed     : Qt6Core Qt6Gui Qt6Network Qt6Pdf Qt6Svg Qt6Widgets
Updating Qt6Cored.dll.
Updating Qt6Guid.dll.
.........
Creating qt_zh_CN.qm...
Creating qt_zh_TW.qm...
-- Installing: D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install/bin/helloworld.exe
12:36:03: The process "C:\Program Files\CMake\bin\cmake.exe" exited normally.
12:36:03: Elapsed time: 00:03.
  • 在資源管理器中打開 D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install/bin目錄, 運行 hello world.exe, 此時程序可以正常運行.

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

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

相關文章

5個GitHub熱點開源項目!!

1.自托管 Moonlight 游戲串流服務&#xff1a;Sunshine 主語言&#xff1a;C&#xff0c;Star&#xff1a;14.4k&#xff0c;周增長&#xff1a;500 這是一個自托管的 Moonlight 游戲串流服務器端項目&#xff0c;支持所有 Moonlight 客戶端。用戶可以在自己電腦上搭建一個游戲…

【Mark】記錄用寶塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加載失敗問題

背景 想要用寶塔搭建worldpress&#xff0c;然后用域名直接轉https&#xff0c;隱藏掉ipport。 結果被折磨了1天&#xff0c;一直在死活在301&#xff0c;127.0.0.1打轉 還有css加載不了的情況 因為worldpress很多是301重定向的&#xff0c;所以改到最后我都不知道改了什么&am…

認知動力學視角下的生命優化系統:多模態機器學習框架的哲學重構

認知動力學視角下的生命優化系統&#xff1a;多模態機器學習框架的哲學重構 一、信息熵與生命系統的耗散結構 在熱力學第二定律框架下&#xff0c;生命系統可視為負熵流的耗散結構&#xff1a; d S d i S d e S dS d_iS d_eS dSdi?Sde?S 其中 d i S d_iS di?S為內部熵…

考慮復雜遭遇場景下的COLREG,基于模型預測人工勢場的船舶運動規劃方法附Matlab代碼

考慮復雜遭遇場景下的COLREG&#xff0c;基于模型預測人工勢場的船舶運動規劃方法附Matlab代碼 一、引言 1.1、研究背景和意義 隨著全球航運業的迅猛發展&#xff0c;船舶交通密度不斷增大&#xff0c;海上交通事故頻發&#xff0c;嚴重威脅到海上航行的安全。國際海上避碰規…

基于Kerberos認證對接華為云Elasticsearch

可以通過華為官方提供的Elasticsearch Java客戶端&#xff08;基于Elasticsearch官方版本改造&#xff09;&#xff0c;實現基于Kerberos認證訪問和操作華為云Elasticsearch&#xff1b;亦可以使用更加通用的開源Elasticsearch Java客戶端bboss&#xff0c;實現基于Kerberos認證…

【湖北省計算機信息系統集成協會主辦,多高校支持 | ACM出版,EI檢索,往屆已見刊檢索】第二屆邊緣計算與并行、分布式計算國際學術會議(ECPDC 2025)

第二屆邊緣計算與并行、分布式計算國際學術會議&#xff08;ECPDC 2025&#xff09;將于2025年4月11日至13日在中國武漢盛大召開。本次會議旨在為邊緣計算、并行計算及分布式計算領域的研究人員、學者和行業專家提供一個高水平的學術交流平臺。 隨著物聯網、云計算和大數據技術…

CSS—背景屬性與盒子模型(border、padding、margin)

目錄 一.背景屬性 二.盒子模型 1.邊框border a. 圓角屬性border-radius b. 圖像屬性border-image 2. 內邊距padding 3. 外邊距margin 3. 寬度width與高度height 一.背景屬性 瀏覽器背景圖默認是平鋪效果&#xff08;復制圖片直至填滿設置的區域大小&#xff09; 背景…

【文獻閱讀】A Survey Of Resource-Efficient LLM And Multimodal Foundation Models

發表時間&#xff1a;二〇二四年九月二十三日 摘要 大型基礎模型&#xff0c;包括大語言模型&#xff08;LLMs&#xff09;、視覺Transformer&#xff08;ViTs&#xff09;、擴散模型以及基于大語言模型的多模態模型&#xff0c;正在革新整個機器學習的生命周期&#xff0c;…

SslConnection::SslConnection()詳解

一、&#x1f50d; SslConnection::SslConnection() 詳解 這個構造函數的主要作用是&#xff1a; 創建 SSL 對象創建 BIO&#xff08;I/O 緩沖區&#xff09;初始化 SSL 服務器模式綁定回調函數&#xff08;onRead() 處理接收數據&#xff09; &#x1f4cc; 1. 初始化 SSL 相…

python中單例模式應用

數據庫連接池單例模式 1. 為什么使用單例模式 創建數據庫連接是一個昂貴的過程&#xff08;涉及網絡通信、認證等&#xff09;。單例模式的連接池可以在程序啟動時初始化一組連接&#xff0c;并在整個生命周期中重用這些連接&#xff0c;而不是每次請求都新建連接。同時還可…

藍橋 發現環

0發現環 - 藍橋云課 找到環 不過在最近一次維護網絡時&#xff0c;管理員誤操作使得某兩臺電腦之間增加了一條數據鏈接&#xff0c;于是網絡中出現了環路。環路上的電腦由于兩兩之間不再是只有一條路徑&#xff0c;使得這些電腦上的數據傳輸出現了BUG。 為了恢復正常傳輸&am…

不同版本的BLE和WiFi有什么區別?

一、藍牙技術對比&#xff1a;從 Bluetooth 4.0 到 5.3 的演進與室內定位應用 藍牙技術自推出以來&#xff0c;經歷了多次重大升級&#xff0c;每一代都在傳輸速率、功耗、覆蓋范圍和功能上有所改進。本文將從 Bluetooth 4.0 到 5.3&#xff0c;逐一對比各版本的特點&#xff0…

看視頻學習方法總結

以下是提高教學視頻吸收率的系統性方法&#xff0c;結合認知科學原理和實際學習場景&#xff0c;幫助您最大化學習效果&#xff1a; 一、觀看前的黃金準備階段 60秒快速掃描法 用1分鐘快速瀏覽視頻目錄、章節標題和簡介&#xff0c;建立知識框架。荷蘭伊拉斯姆斯大學實驗表明&…

Basler acA1920-40gc

軟件 下載Basler軟件 | Basler AG 說明書 ace acA1920-40gc | GigE相機 | Basler | Basler AG 支持PTP同步 在使用 Basler acA1920-40gc 相機和 Polyn View 軟件時&#xff0c;確認 PTP&#xff08;Precision Time Protocol&#xff09;同步是否成功&#xff0c;可以通過…

華為hcia——Datacom實驗指南——STP工作基本原理及STP/RSTP基本功能配置

什么時候需要用到STP 在二層交換網絡中&#xff0c;為了避免環路產生。 什么是STP STP生成樹協議&#xff0c;是用來在冗余鏈路上消除二層環路。在眾多交換機中&#xff0c;需要設置出一個根橋&#xff0c;其余的交換機稱為非根橋&#xff0c;根橋是整個交換網絡的核心&…

【后端】Docker一本通

長期更新補充&#xff0c;建議關注收藏點贊 目錄 Docker概述安裝部署Docker基本操作使用docker部署tomcat使用docker部署mysql Docker概述 docker是?個應?級隔離的虛擬化技術docker三大核心概念 鏡像&#xff1a;是具有源的所有特征的?個標記?件 倉庫&#xff1a;存放鏡像…

linux中斷調用流程(arm)

文章目錄 ARM架構下Linux中斷處理全流程解析&#xff1a;從硬件觸發到驅動調用 ?**一、中斷觸發與硬件層響應** &#x1f50c;**1. 設備觸發中斷** &#x1f4e1; **二、CPU階段&#xff1a;異常入口與上下文處理** &#x1f5a5;?**1. 異常模式切換** &#x1f504;**2. 跳轉…

第十四屆藍橋杯大賽軟件賽國賽C/C++大學C組

A 【跑步計劃——日期問題】-CSDN博客 B 【殘缺的數字】-CSDN博客 C 題目 代碼 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…

汽車低頻發射天線介紹

汽車低頻PKE天線是基于RFID技術的深度研究及產品開發應用的一種天線&#xff0c;在汽車的智能系統中發揮著重要作用&#xff0c;以下是關于它的詳細介紹&#xff1a; 移動管家PKE低頻天線結構與原理 結構&#xff1a;產品一般由一個高Q值磁棒天線和一個高壓電容組成&#xff…

藍橋杯web第三天

展開扇子題目&#xff0c; #box:hover #item1 { transform:rotate(-60deg); } 當懸浮在父盒子&#xff0c;子元素旋轉 webkit display: -webkit-box&#xff1a;將元素設置為彈性伸縮盒子模型。-webkit-box-orient: vertical&#xff1a;設置伸縮盒子的子元素排列方…