在MFC中使用Qt(四):使用屬性表(Property Sheet)實現自動化Qt編譯流程

前言

首先回顧下前面文章介紹的:
在MFC中使用Qt(一):玩膩了MFC,試試在MFC中使用Qt!(手動配置編譯Qt)

在MFC中使用Qt(二):實現Qt文件的自動編譯流程

在MFC中使用Qt(三):通過編輯項目文件(.vcxproj)實現Qt的自動化編譯流程

本文將詳細介紹自動化Qt編譯流程的最后一種方式:使用屬性表(Property Sheet)實現自動化Qt編譯流程。

使用屬性表(Property Sheet)實現自動化Qt編譯流程

首先需要了解下屬性表的作用機制。

當你在項目中導入一個 .props 文件(屬性表),其內容會被插入到項目文件的 ?全局作用域 中,并與項目原有配置 ?合并。

具體行為如下:
屬性表中的這些節點會與項目文件中的同名節點合并。如果存在同名屬性,項目文件中的配置可能優先(取決于 MSBuild 的評估順序)。

因此本質上還是和方式二:編輯項目文件(.vcxproj)一樣。

這里再新建一個基于對話框的MFC項目MFCWithQtAuto3,創建后編譯運行:
1
接著參考手動編譯流程中的步驟①②,在MFC項目配置Qt環境。

步驟①配置Qt環境(必不可少!)

2
3

步驟②配置項目

4
5
6
Qt環境配置完成后編譯運行,確認沒有問題:
7

屬性表實現步驟③④的自動化Qt編譯流程

再通過屬性表實現步驟③④的自動化Qt編譯流程,大致流程如下:

創建通用屬性表,為所有 Qt 文件統一配置:
1)創建屬性表。

右鍵項目 → ?Add → New Item → 選擇 ?Property Sheet?(命名為 QtAuto.props)。
8

2)配置屬性表。

在 QtAuto.props 中定義以下規則(內容和方式二中的配置一致):

<!-- 自動包含 所有目錄下的 .ui 、moc、qrc文件 --><ItemGroup><UIFiles Include="**\*.ui" /></ItemGroup><!-- 自定義構建步驟,編譯 .ui 文件為 .h 文件 --><ItemGroup><CustomBuild Include="@(UIFiles)"><Command>"uic.exe" %(FullPath) -o $(ProjectDir)GeneratedFiles\uic\ui_%(Filename).h</Command><Outputs>$(ProjectDir)GeneratedFiles\ui_%(Filename).h</Outputs></CustomBuild></ItemGroup><!-- 自動包含 所有目錄下的 帶Q_OBJECT宏的.h 文件。因無法區分普通的C++.h,因此需要在一個目錄(這里是qt/UI目錄)中統一管理 --><ItemGroup><MocFiles Include="$(ProjectDir)qt\UI\*.h" /></ItemGroup><ItemGroup><CustomBuild Include="@(MocFiles)"><Command>"moc.exe" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc\moc_%(Filename).cpp"</Command><Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp</Outputs></CustomBuild></ItemGroup><ItemGroup><!-- 自動包括所有的 .qrc 文件 --><QrcFiles Include="**\*.qrc" /></ItemGroup><ItemGroup><CustomBuild Include="@(QrcFiles)"><Command>"rcc.exe" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\rcc\qrc_%(Filename).cpp"</Command><Outputs>$(ProjectDir)GeneratedFiles\qrc_%(Filename).cpp</Outputs></CustomBuild></ItemGroup><ItemGroup><ClCompile Include="$(ProjectDir)GeneratedFiles\moc\moc_*.cpp"><PrecompiledHeader>NotUsing</PrecompiledHeader></ClCompile><ClCompile Include="$(ProjectDir)GeneratedFiles\rcc\qrc_*.cpp"><PrecompiledHeader>NotUsing</PrecompiledHeader></ClCompile></ItemGroup><ItemDefinitionGroup><ClCompile><!-- 添加新路徑到現有包含目錄列表 --><AdditionalIncludeDirectories>GeneratedFiles\uic;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories></ClCompile></ItemDefinitionGroup>

3)應用屬性表。

進入屬性管理器視圖 -》 右鍵對應配置 -》 添加現有屬性表 -》 選擇剛剛創建的QtAuto.props:
9
同樣使用MFC按鈕點擊彈出Qt對話框測試示例:
10
編譯運行沒有問題:
11

總結

方式三:使用屬性表,本質上還是和方式二:編輯項目文件一樣,只是沒有直接編輯項目文件,而是通過創建一個同樣的QtAuto.props,再導入到當前項目文件中。

通過這種方式可以實現Qt自動化編譯流程屬性配置的復用,在多人協同開發情況下,其中一人配置好通用的Qt自動化編譯流程配置屬性表,直接通過該屬性表,可直接再另一個人的開發環境中導入配置使用,而無需再另外配置。

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

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

相關文章

Go紅隊開發— 收官工具

文章目錄 免責聲明個人武器開發美觀輸出Whois查詢反查ip目錄掃描子域名爆破被動掃描主動掃描(字典爆破)CDN檢測 免責聲明 &#x1f4a1; 本博客絕不涉及任何非法用途。 &#x1f4a1; 使用者風險自擔&#xff0c;違規后果自負。 &#x1f4a1; 守法為先&#xff0c;技術向善。 …

論文閱讀《P?roximal Curriculum for Reinforcement Learning Agents》——提升智能體學習速度的

老規矩&#xff0c;今天是使用Gemini2.5pro來生成的模板 這篇論文研究了如何為處理多個相關任務的強化學習智能體自動設計學習課程&#xff08;即任務順序&#xff09;&#xff0c;以加速訓練過程&#xff0c;并解決現有方法需要大量調參或缺乏理論依據的問題。為此&#xff0…

【面試題】在 CSS 中,實現一個 div 中的子 div 水平垂直居中

1. 使用 Flexbox 特點&#xff1a;簡單、直觀&#xff0c;現代瀏覽器支持良好。 代碼&#xff1a; css .parent {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */height: 200px; /* 父容器需有高度 */ } .child {…

基于SpringBoot的失物招領平臺(源碼+數據庫)

476基于SpringBoot的失物招領平臺&#xff0c;有用戶和管理員兩個角色&#xff0c;主要功能如下 失物招領系統功能介紹如下&#xff1a; 1. 用戶功能&#xff1a; - 發布失物公告&#xff1a;用戶可以發布自己的失物信息 - 失物分類&#xff1a;用戶可以根據失物的類型進行分類…

PyQt6實例_批量下載pdf工具_批量pdf網址獲取

目錄 前置&#xff1a; 步驟&#xff1a; step one 安裝包 step two 獲取股票代碼 step three 敲代碼&#xff0c;實現 step four 網址轉pdf網址 視頻 前置&#xff1a; 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭&#xff0c;放在 【PyQt6實例】 專欄 2 本節講…

量子退火與機器學習(2):少量實驗即可找到新材料,黑盒優化?量子退火

使用量子退火和因子分解機設計新材料 這篇文章是東京大學的一位博士生的畢業論文中的主要貢獻。 結合了黑盒優化和量子退火&#xff0c;是融合的非常好的一篇文章&#xff0c;在此分享給大家。 https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.0133…

從零開始:Makefile 與 CMake 的基礎入門與實踐

本文適合基礎學者 零基礎 makefile 定義&#xff1a;Makefile 是一種傳統的構建工具&#xff0c;用于定義如何編譯和鏈接源代碼。它通過一系列規則來描述如何生成目標文件&#xff08;如可執行文件或庫&#xff09;。 功能&#xff1a;定義編譯規則&#xff08;如如何從源文件…

android開啟Sys V IPC,并使用共享內存編程

參考&#xff1a;安卓開啟Sys V IPC&#xff0c;并使用共享內存編程 | 久奈浜的CS部 刪除config中-# CONFIG_SYSVIPC is not set 在rk3576.config中增加CONFIG_SYSVIPCy CONFIG_SYSVIPCy CONFIG_SYSVIPC_SYSCTLy CONFIG_SYSVIPC_COMPATy CONFIG_IPC_NSy system/sepolicy/pre…

docker pull lss233/one-api:latest 在哪里運行,作用是什么

docker pull lss233/one-api:latest 在哪里運行,作用是什么 1. 在哪里運行? docker pull lss233/one-api:latest 是一個Docker命令,需在已安裝Docker的環境中執行。 適用環境:本地開發機、服務器、云主機等。前提條件:需先安裝Docker并配置好環境。2. 作用是什么? 該命令…

輪胎廠相關筆記

一、術語 圖解&#xff1a;https://news.yiche.com/hao/wenzhang/38498703/ 1、胚胎 在輪胎制造行業中&#xff0c;“胎胚”&#xff08;也稱“生胎”或“未硫化輪胎”&#xff09;是指輪胎在硫化&#xff08;高溫高壓固化&#xff09;之前的半成品形態。它是輪胎成型的中間…

開發者視角:應用程序中HTTP代理的集成指南

目錄 一、為何需要HTTP代理&#xff1f; 二、集成方式分階解析 三、關鍵配置管理策略 四、安全與性能平衡 五、調試與問題排查 六、最佳實踐總結 結語 在開發需要與外部網絡交互的應用程序時&#xff0c;HTTP代理是繞不開的實用工具。它既能解決網絡限制問題&#xff0c…

從紙質到 AI 時代:我的筆記工具探索之旅

今天清晨&#xff0c;在得到上閑逛時&#xff0c;偶然間發現了一本名為《筆記的方法》的書&#xff0c;這本由Flomo的作者出版的圖書&#xff0c;深入探討了記筆記的藝術。 說起記筆記&#xff0c;這些年來&#xff0c;我嘗試了各種各樣的工具&#xff0c;今天就來梳理一下我的…

Ubuntu22云服務器添加2G Swap分區

Ubuntu22云服務器添加2G Swap分區 步驟 1&#xff1a;檢查當前 Swap 和內存步驟 2&#xff1a;創建 2GB 的 Swap 文件步驟 3&#xff1a;設置權限并格式化步驟 4&#xff1a;啟用 Swap 文件步驟 5&#xff1a;永久保留 Swap 配置可選優化&#xff1a;調整 Swappiness驗證結果注…

網絡空間安全(43)Linux實戰篇

一、系統配置安全 BIOS安全設置 設置BIOS密碼&#xff1a;防止未授權用戶修改BIOS設置。修改引導次序&#xff1a;禁止從軟盤啟動系統&#xff0c;減少潛在的啟動攻擊風險。 文件系統權限管理 最小化SUID權限程序&#xff1a;SUID&#xff08;Set User ID&#xff09;程序以ro…

軟件的常用設計模式。可參考一個一個學習

以下是軟件設計中常見的 **23種經典設計模式**&#xff08;基于《設計模式&#xff1a;可復用面向對象軟件的基礎》GoF 的經典分類&#xff09;&#xff0c;并結合 **Python 語言特性**的簡要說明和典型應用場景。我將它們分為 **創建型、結構型、行為型** 三大類&#xff0c;供…

性能比拼: Go(Gin) vs Python(Flask)

本內容是對知名性能評測博主 Anton Putra Go (Golang) vs Python Performance Benchmark (Kubernetes - OpenTelemetry - Prometheus - S3/Postgres) 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 在本視頻中&#xff0c;我們將比較 Golang 和 Python 的性能。 但…

Android版本更新服務通知下載實現

在日常開發中&#xff0c;我們肯定會有檢查版本更新的需求&#xff0c;那我版本更新的輪子網上也是有的&#xff0c;想自己實現一下代碼如下&#xff1a; 下載管理類&#xff1a; public class DownLoadManager {private static final String MAIN "main"; //Tagp…

UE5學習筆記 FPS游戲制作33 換子彈 動畫事件

新建動畫蒙太奇 為Rifle和Launcher各自新建一個動畫蒙太奇&#xff0c;拖入動畫&#xff0c;注意動畫的軌道要和動畫藍圖里的一致 在蒙太奇添加動畫事件 在通知一欄新增一個軌道&#xff0c;右鍵軌道&#xff0c;新增一個 換槍完成 通知&#xff0c;不同動畫的同名通知需要…

uniapp中uploadFile的用法

基本語法 uni.uploadFile(OBJECT)OBJECT 是一個包含上傳相關配置的對象&#xff0c;常見參數如下&#xff1a; 參數類型必填說明urlString是開發者服務器地址。filePathString是要上傳文件資源的本地路徑。nameString是文件對應的 key&#xff0c;開發者在服務端可以通過這個 …

Android設計模式之責任鏈模式

一、定義&#xff1a; 使多個對象都有機會處理請求&#xff0c;從而避免了請求的發送者和接收者之間的耦合關系將這些對象連城一條鏈&#xff0c;并沿著這條鏈傳遞該請求&#xff0c;只到有對象處理它為止。 二、模式結構&#xff1a; 抽象處理者&#xff08;Handler&#xff…