初始QML

由于項目原因,最近要進行qml相關開發,我之前也沒有搞過qml,因此開一個qml系列的專欄,記錄自己關于qml的相關學習

新建第一個qml工程

按如下圖所示方法新建一個最簡單的qml工程:

編譯運行

可以看到是一個標題為“hello word”沒有任何內容的空白窗體。

代碼解析

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endifQGuiApplication app(argc, argv);QQmlApplicationEngine engine;const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine,&QQmlApplicationEngine::objectCreated,&app,[url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);},Qt::QueuedConnection);engine.load(url);return app.exec();
}

可以看到與傳統QWidget工程相比關鍵不同的是這一部分:

    QQmlApplicationEngine engine;const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine,&QQmlApplicationEngine::objectCreated,&app,[url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);},Qt::QueuedConnection);engine.load(url);

如果是QWidget工程這里一般是聲明一個窗體比如QWidget然后show()顯示。這里有一個很關鍵的QQmlApplicationEngine類,QML中最關鍵的也是這個QQmlApplicationEngine

QQmlApplicationEngine 的核心作用

這段代碼是 Qt Quick 應用程序的入口核心,與傳統QWidget w,w.show()有本質區別。QQmlApplicationEngine負責加載 QML 文件并構建完整的應用程序對象樹。比如上面代碼engine.load(url)。這是一個QML引擎。

QML 引擎初始化流程

  1. 引擎實例化
    QQmlApplicationEngine?engine;?創建 QML 引擎,負責解析 QML 文件、管理組件生命周期和綁定 JavaScript 上下文。

  2. QML 資源定位
    const QUrl url(QStringLiteral("qrc:/main.qml"))指定 QML 入口文件路徑。qrc表示從 Qt 資源系統加載,避免文件路徑依賴問題。

  3. 對象創建回調
    綁定引擎的信號,用于檢測根組件是否成功加載。若失敗(!obj?且 URL 匹配),則強制退出應用。

  4. 啟動 QML 渲染
    前面都是準備工作,最后關鍵一步engine.load(url)最終觸發 QML 文件的解析和渲染,生成可視化界面。

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")
}
  • QtQuick 2.15:導入基礎 Qt Quick 模塊,包含創建 UI 所需的核心類型
  • QtQuick.Window 2.15:提供窗口管理功能,包含 Window 類型

這里就有一個疑問為什么是2.15,別的行不行?

QtQuick 和 QtQuick.Window 的版本號(如2.15)與Qt框架的版本發布周期相關。每個Qt版本會包含對應的Qt Quick模塊更新,版本號反映了模塊的兼容性和功能集。所以版本號并非隨意選擇,而是與Qt發行版中穩定的模塊版本一致。例如我使用的Qt版本是5.15.2。Qt 5.15.2中Qt Quick模塊的API版本為2.15。

然后下面部分就是定義了一個寬為640px,高為480px并且初始可見,標題為Hello World的window對象。

這里明顯就可以看出與傳統QWidget開發代碼的不同,QWidget 通過代碼顯式創建控件(命令式),而 QML 通過描述式語言定義界面(聲明式),由引擎動態生成對象。并且QWidget 直接操作原生窗口對象,QML 引擎則維護獨立的場景圖(Scene Graph),通過渲染線程優化性能。

以上就是關于新建的第一個qml工程的代碼解析,后續會進一步更新其他相關qml內容。

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

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

相關文章

Coze源碼分析-資源庫-創建知識庫-基礎設施/存儲/安全

6. 基礎設施層 基礎設施層為知識庫創建功能提供底層技術支撐&#xff0c;包括數據存儲、緩存、消息隊列、文檔處理、向量化等核心服務。 6.1 數據存儲服務 6.1.1 MySQL數據庫 文件位置: backend/infra/rdb/mysql.go // MySQLConfig MySQL配置 type MySQLConfig struct {Host …

【iOS】設計模式復習

目錄 觀察者模式 通知機制 基本使用 注冊觀察者 創建一個通知 發送通知 通知與多線程 使用異步發送通知 NSNotificationQueue通知隊列 在子線程中運行觀察者函數 實現原理 named表 nameless表 wildcard表 添加觀察者 發送通知 移除通知? KVO機制 基本使用 …

RK3568 NPU :RKNN-ToolKit2環境搭建

1. 安裝Miniconda3 下載 Linux 64 位 Miniconda 最新版安裝腳本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh安裝 Miniconda bash Miniconda3-latest-Linux-x86_64.sh -u安裝完成后會自動設置環境變量。打開新的終端&#xff0c;發現用戶名前…

Ubuntu 24.04 Server 版系統安裝及配置

Ubuntu 24.04 Server 版安裝及配置 文章目錄Ubuntu 24.04 Server 版安裝及配置一、獲取安裝文件二、虛擬機配置三、安裝界面四、配置網絡五、擴容根分區 一、獲取安裝文件二、虛擬機配置三、安裝界面 選擇English&#xff08;US&#xff09;問是否升級內核配置鍵盤手動配置ipv4…

Java 事務失效場景全解析

在 Java 開發中&#xff0c;事務管理是保證數據一致性的核心機制&#xff0c;尤其是在 Spring 框架中&#xff0c;Transactional注解的使用極大簡化了事務配置。然而&#xff0c;在實際開發中&#xff0c;事務常常會因為一些細節問題而失效&#xff0c;導致數據異常。本文將詳細…

【Coze搞錢實戰】14. 抖音直播間自動回復機器人實戰教程:三小時搭建智能客服,互動率提升150%(保姆級無代碼指南)

摘要:抖音直播間高頻問題重復回復、觀眾互動不及時是運營痛點。本文針對新手和進階用戶,提供無代碼的自動回復機器人搭建方案:新手1小時完成基礎配置(Coze+抖音對接),進階用戶通過促銷倒計時、粉絲分層、熱點借勢三大策略提升互動率150%。方案基于某女裝直播間實測數據(…

云計算核心知識梳理

云計算作為新一代信息技術的核心,其體系涵蓋特點、定義、技術演進及分類等多個維度,以下是對相關知識的系統整合與解讀。 一、云計算的核心特點 / 優勢 云計算的優勢圍繞資源利用效率、服務靈活性和管理便捷性展開,具體可拆解為五大核心特性: 按需自助服務:用戶無需人工干…

安卓13_ROM修改定制化-----安卓 13 系統 ROM 定制化與低版本系統的核心區別

安卓系統憑借其全球領先的市場占有率,開放特性為廠商和開發者提供了深度定制的空間,形成了豐富的ROM生態圈。從最初的安卓1.0到最新的安卓15,系統在功能、性能和安全方面不斷迭代升級,同時也為ROM定制帶來了新的機遇與挑戰。特別是從安卓11開始,谷歌對系統架構和安全機制進…

【Java后端】Spring Boot 2.7.x 和 Swagger 3.0.x (springfox 3.x) 的兼容性問題

springfox 在 Spring Boot 2.6 開始就有很多兼容性 bug&#xff08;主要是 Spring MVC PathPatternParser 的引入&#xff09;&#xff0c;導致在 Spring Boot 2.6/2.7 里經常出現 無法啟動 / 無法訪問 swagger-ui.html 的情況。&#x1f50e; 問題原因Spring Boot 2.6 開始默認…

Vue3+ts使用oidc-client-ts

配置 OIDC 客戶端 在項目中創建 authOptions 對象&#xff0c;定義 OIDC 認證所需的配置項&#xff1a; export const authOptions {authority: https://xxxxxxxxx/UserCenter, // 認證服務器 URLclient_id: xxxx, // 客戶端 IDredirect_uri: http://localhost:3000/callbac…

從 “數據中轉站“ 到 “邊緣智能中樞“:區域網關的技術突圍與開發范式重構

在物聯網架構中,區域網關長期被視為 "邊緣與云端的橋梁"—— 負責協議轉換、數據轉發、設備接入等基礎功能。但隨著邊緣計算興起與 AI 模型輕量化,區域網關正經歷從 "被動轉發" 到 "主動決策" 的范式躍遷。 本文將從開發視角拆解區域網關的三大…

Django全棧班v1.04 Python基礎語法 20250913 早上

print 函數基本用法 print函數會自加換行符&#xff0c;一個print&#xff0c;會打印一行輸出。 print("第一行") print("第二行") print("第三行")輸出結果&#xff1a;print 輸出多個值 一個print可以同時輸出多個值&#xff0c;這多個值會在一…

面試鴨Java八股之Kafka

Kafka是什么&#xff1f;它的主要應用場景有哪些? Kafka是一種分布式流事件處理平臺&#xff0c;最初由 LinkedIn 開發&#xff0c;現在是 Apache 基金會的一部分。它的核心功能主要包括消息隊列、流處理和數據集成。Kafka以高吞吐量、低延遲、可擴展和高容錯性著稱。 Kafka…

ARM32平臺Bus Error深度排查:從調用棧到硬件原理的完整拆解

ARM32平臺Bus Error深度排查&#xff1a;從調用棧到硬件原理的完整拆解 在嵌入式開發中&#xff0c;Bus Error&#xff08;信號7&#xff09;是個容易讓人頭疼的問題——它不像SIGSEGV&#xff08;段錯誤&#xff09;那樣直觀&#xff0c;常與硬件內存布局、指針破壞等底層問題…

適合工業用的筆記本電腦

在工業領域&#xff0c;生產環境往往復雜多變&#xff0c;從高溫、高濕的車間&#xff0c;到布滿粉塵的礦山&#xff0c;再到震動頻繁的施工現場&#xff0c;普通的筆記本電腦很難在這樣的環境中穩定運行&#xff0c;而工業用筆記本電腦的誕生&#xff0c;完美地解決了這一難題…

在LINUX中常見的文件系統類型

常見文件系統類型對比表文件系統類型作用和特點主要使用場景優缺點ext4Linux標準文件系統&#xff0c;日志式&#xff0c;支持大文件和分區Linux根文件系統、/home、/var等主要分區優點&#xff1a;穩定成熟&#xff0c;支持大文件(16TB)&#xff0c;日志功能保證數據安全&…

Unity核心概念⑥:Time

一、Time的主要用途主要用于游戲中參與位移、記時、時間暫停等。二、時間縮放比例1.時間停止&#xff1a;Time.timeScale 0;2.回復正常&#xff1a;Time.timeScale 1;3.二倍速&#xff1a;Time.timeScale 2;三、幀間隔時間幀間隔時間是指最近的一幀用了多少時間。1.用途主要…

Node.js 模塊化規范詳解

在 Node.js 中&#xff0c;模塊化是開發應用程序的核心概念&#xff0c;它使得代碼可以按照功能模塊進行分割&#xff0c;易于維護、復用和擴展。Node.js 支持兩種模塊化規范&#xff1a;CommonJS&#xff08;CJS&#xff09;&#xff1a;這是 Node.js 最初使用的模塊化規范。E…

前端網絡性能優化實踐:從 HTTP 請求到 HTTPS 與 HTTP/2 升級

在前端性能優化體系中&#xff0c;服務端與網絡層的優化是提升用戶體驗的關鍵環節。本文將圍繞 HTTP 請求優化、Cookie 管理、服務器緩存配置、gzip 壓縮、HTTPS 部署及 HTTP/2 升級等核心內容&#xff0c;系統拆解優化策略與實施方法&#xff0c;為團隊技術分享提供完整的知識…

[數據結構——lesson8.樹]

目錄 引言 學習目標 1.樹的概念及結構 1.1樹的定義 1.2樹的基本概念 1.3 樹的表示 (1)雙親表示法 (2)孩子表示法 (3)左孩子右兄弟表示法 1.4 樹在實際中的運用&#xff08;表示文件系統的目錄樹結構&#xff09; 結束語&#xff1a; 引言 之前我們學習了棧和隊列數…