c++加載qml文件

這里展示了c++加載qml文件的三種方式以及qml文件中根節點的訪問

準備

在創建工程的初期,遇到了一個問題,cmake文件以前都是系統自動生成的,不需要我做過多的操作修改,但是,加載qml的程序主函數是需要用到QGuiApplication,qtcreater沒法自動生成相關的項目,cmake得自己手搓了,嗚嗚嗚,我是最煩手搓這玩意,東拼西湊搞半天,搞不好這個庫沒找到,那個庫沒找到,回頭得系統的學一下這個了。。。。

#CMakeLists.txt
#最低版本號
cmake_minimum_required(VERSION 3.20)#項目名稱
project(cmake_qml_cpp)
#自動尋找所需qt套件
find_package(Qt6 COMPONENTS Quick REQUIRED)set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)#添加到項目
add_executable(${PROJECT_NAME}main.cppsource.qrc
)#尋找到的套件要連接進來,不然會找不到一些庫文件
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Quick)

這是我寫的cmake,導入的庫是qt6的quick,其他版本要改哦

文件結構

qml程序是隨便寫的幾個,因為要展示三種加載方式,先上運行效果圖?

第一種方式:QQmlApplicationEngine

代碼:

//第一種方式QQmlApplicationEngine//結合了QQmlEngine和QQmlComponent,這一步已經可以達到顯示效果了QQmlApplicationEngine appeng("qrc:/qml/main.qml");//獲取組件的根節點,就是qml程序的windowauto objs=appeng.rootObjects();auto win=static_cast<QQuickWindow*>(objs[0]);win->setX(0);win->setTitle("修改后的");

這種最簡單,引擎直接加載,并且可以獲取根節點來修改屬性

第二種方式:QQuickView

代碼:

QQuickView view;view.setSource(QUrl("qrc:/qml/2.qml"));view.setWidth(500);view.setHeight(500);view.show();

這種方式要注意qml中不可以有window作為根節點,他會自動創建一個的

第三種方式:QQmlEngine和QQmlComponent相結合

//第三種方式//qqmlengine和qqmlcomponent相結合QQmlEngine eng;QQmlComponent com(&eng);//加載qml內容,下面的是用loadurl的方式,還有一種是直接調用setdata,在里面直接上qml文本語言,我不習慣,就這樣吧com.loadUrl(QUrl("qrc:/qml/3.qml"));if(com.isError()){qDebug()<<"com的錯誤:"<<com.errorString();}//創建對象,為了管理對象生命周期,將其先轉換為window指針再交給智能指針管理std::unique_ptr<QQuickWindow>ct(static_cast<QQuickWindow*>(com.create()));ct->show();ct->setWidth(400);ct->setHeight(400);

這個就有點像自己純手工搭建了,qqmlengine是引擎,一般component共用一個引擎,我這里使用load的方式加載,setdata是那種qml語言加上文本語言像\n什么的,不想搞,qml還有提詞,獲取錯誤就不說了,管理對象生命周期的問題,我是覺得應該有對象樹系統管理比較好,這里使用智能指針管理,先創建對象,再強制轉換程qquickwindow指針交給unique_ptr管理。

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

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

相關文章

007TG洞察:GPT-5前瞻與AI時代競爭力構建:技術挑戰與落地路徑

最近&#xff0c;GPT-5 即將發布的消息刷爆了科技圈&#xff0c;更讓人期待的是&#xff0c;GPT-6 已經悄悄啟動訓練了&#xff0c;OpenAI 的奧特曼表示對未來1-2年的模型充滿信心&#xff0c;預測AI將進化為能夠發現新知識的“AI科學家”。面對日益強大的通用AI&#xff0c;企…

Windows下編譯OpenVDB

本文記錄在Windows下編譯OpenVDB的流程。 零、環境 操作系統Windows 11VS Code1.92.1Git2.34.1MSYS2msys2-x86_64-20240507Visual StudioVisual Studio Community 2022CMake3.22.1 一、編譯 1.1 下載 git clone https://github.com/AcademySoftwareFoundation/openvdb.git …

react 內置hooks 詳細使用場景,使用案例

useState場景&#xff1a;組件中管理局部狀態&#xff0c;如表單值、開關、計數器等。const [count, setCount] useState(0); return <button onClick{() > setCount(count 1)}>Click {count}</button>;useEffect 場景&#xff1a;組件掛載時執行副作用&#…

從0到1學Pandas(九):Pandas 高級數據結構與操作

目錄一、探秘多級索引1.1 創建多級索引1.2 多級索引操作1.3 索引轉換二、探索 Panel 與 xarray2.1 Panel 數據結構2.2 xarray 庫2.3 高維數據操作三、時間序列高級應用3.1 時區處理3.2 時間序列重采樣與頻率轉換3.3 時間序列分解與預測四、數據透視與重塑高級技巧4.1 復雜透視表…

C# 圖像轉換實戰:Bitmap 轉 BitmapSource 的 2 種方法

C# 圖像轉換實戰:Bitmap 轉 BitmapSource 的 2 種方法 引言 兩種轉換方法的完整實現 1. 基于GDI句柄的直接轉換 (ToBitmapSourceFast) 2. 基于內存流的編碼轉換 (ToBitmapSourceSafe) 方法對比與選型指南 避坑指南 GDI句柄泄漏問題 圖像顯示不完整 多線程訪問圖像引發異常 不同…

Spring Boot 整合 Spring MVC:自動配置與擴展實踐

Spring MVC 作為 Java Web 開發的核心框架&#xff0c;在傳統 SSM 項目中需要大量 XML 配置&#xff08;如 DispatcherServlet、視圖解析器等&#xff09;。而 Spring Boot 通過 "自動配置" 特性&#xff0c;簡化了 Spring MVC 的整合過程&#xff0c;同時保留了靈活…

print(“\033[31m紅\033[32m綠\033[34m藍\033[0m默認色“)

可以讓python的終端字體有著不一樣的顏色。代碼&#xff1a;print("\033[31m紅\033[32m綠\033[34m藍\033[0m默認色")效果&#xff1a;

LNMP-zblog分布式部署

一、準備3臺主機&#xff08;rocky8&#xff09;下載相應服務[rootnginx ~]# yum install -y nginx nfs-utils[rootphp ~]# yum install -y nfs-utils php-mysqlnd php php-fpm[rootmysql ~]# yum install -y mysql-server二、掛載php端[rootphp ~]# vim /etc/exports [rootphp…

常見代碼八股

1. 利用梯度下降法&#xff0c;計算二次函數yx^2x4的最小值 def target_function(x):return x ** 2 x 4def gradient(x):return 2*x 1x_init 10 x x_init steps 100 lr 0.1 for i in range(100):x x - lr*gradient(x)print(f"最小值 f(x) {target_function(x):.4f…

【深入底層】C++開發簡歷4+4技能描述6

簡歷書寫 熟悉C的封裝、繼承、多態&#xff0c;STL常用容器&#xff0c;熟悉C11的Lambda表達式、智能指針等&#xff0c;熟悉C20協程語法&#xff0c;具有良好的編碼習慣與文檔能力。 回答思路 這里是基本上就是要全會&#xff0c;考察的問題也很固定&#xff0c;stl這塊可以定…

forest遠程調用注意事項

1、如果在項目中&#xff0c;同時依賴了其中多個框架&#xff0c;那么按 Fastjson2 > Fastjson > Jackson > Gson 這樣的優先級來判斷&#xff0c;Forest 會以優先級最高的框架作為 JSON 轉換器。2、Forest 支持哪幾種 JSON 框架&#xff1f;A: 支持 Jackson、Gson、F…

網絡資源模板--基于Android Studio 實現的新聞App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情&#xff08;部分) 登錄頁 首頁 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可…

通過Location API精準獲取位置信息并優化定位精度!

&#x1f44b; 你好&#xff0c;歡迎來到我的博客&#xff01;我是【菜鳥不學編程】 ?? 我是一個正在奮斗中的職場碼農&#xff0c;步入職場多年&#xff0c;正在從“小碼農”慢慢成長為有深度、有思考的技術人。在這條不斷進階的路上&#xff0c;我決定記錄下自己的學習與成…

構建可擴展的狀態系統:基于 ArkTS 的模塊化狀態管理設計與實現

摘要 在 HarmonyOS 的日常開發中&#xff0c;很多人都會遇到一個問題&#xff1a;多個頁面之間的數據狀態如何共享&#xff1f;尤其是在組件結構越來越復雜的場景下&#xff0c;如果還用傳統方式來傳值&#xff0c;不僅代碼混亂&#xff0c;維護也很吃力。 為了解決這個問題&am…

重生之我在暑假學習微服務第二天《MybatisPlus-下篇》

本系列參考黑馬程序員微服務課程&#xff0c;有興趣的可以去查看相關視頻&#xff0c;本系列內容采用漸進式方式講解微服務核心概念與實踐方法&#xff0c;每日更新確保知識點的連貫性。通過系統化學習路徑幫助開發者掌握分布式系統構建的關鍵技術。讀者可通過平臺訂閱功能獲取…

系統整理Python的條件語句和常用方法

Python 的條件語句&#xff08;if 語句&#xff09;是控制程序流程的基礎之一&#xff0c;結構清晰、語法簡潔&#xff0c;非常適合初學者掌握。一、基本語法結構if 條件:執行代碼塊1 elif 條件2:執行代碼塊2 else:執行代碼塊3示例&#xff1a;score 85if score > 90:print…

記錄個IAR程序下載后硬件復位不運行,必須斷電復位才運行的問題

【問題測試】有個F407的跑馬燈的例子&#xff0c;是MDK和IAR兩個版本&#xff0c;MDK版本的例子下載并復位后可以正常看到LED閃爍&#xff0c;而IAR的例子下進去后&#xff0c;不會閃爍。使用TOOL的上位機內核寄存器監測工具測試發現&#xff0c;硬件復位后竟然還在調試狀態&am…

觀察者模式(Observer Pattern)和 發布-訂閱模式(Publisher-Subscriber Pattern)

你對 觀察者模式&#xff08;Observer Pattern&#xff09;和 發布-訂閱模式&#xff08;Publisher-Subscriber Pattern&#xff09;的描述是非常準確的&#xff0c;并且闡明了它們的核心區別。為了幫助你更好地理解這兩者的細微差異&#xff0c;下面是一個更詳細的對比分析&am…

2025年接口技術的十字路口:當MCP遇見REST、GraphQL與gRPC

在當今這個由數據驅動、萬物互聯的時代&#xff0c;應用程序接口&#xff08;API&#xff09;已成為現代軟件架構的基石。它們是不同服務之間溝通的橋梁&#xff0c;支撐著從網頁應用到復雜的微服務生態系統的一切。長久以來&#xff0c;開發者們在REST、GraphQL和gRPC這幾種主…

【CTF-WEB-反序列化】利用__toString魔術方法讀取flag.php

題目 頁面提示輸入?code&#xff0c;那我們在網址里get一下出現了新頁面的提示&#xff0c;進入看看下面有個help.php頁面的提示&#xff0c;進入看看有一段php代碼&#xff0c;仔細分析&#xff0c;應該是要用反序列法代碼如下 class FileClass{ public $filename error.log…