Quick qml 區別聯繫

QML VS Qt Quick

從概念上區分

爲了更精確地對兩者進行說明,來看助手的描述:

QML is a user interface specification and programming language.

QML 是一種用戶界面規範和標記語言,允許開發人員和設計師創建高性能、流暢的動畫和視覺吸引人的應用程序。

有點意思,文檔對 QML 的定義主要分爲兩點:

  1. 用戶界面規範:QML 提供了一種高度可讀、聲明性、類似 JSON 的語法,支持與動態屬性綁定相結合的命令式 JavaScript 表達式。
  2. 標記語言:像 C++ 一樣,QML 是一種語言,文件格式以 .qml 結尾。

Qt Quick is the standard library of types and functionality for QML.

Qt Quick 是 QML 類型和功能的標準庫,包括視覺類型、交互式類型、動畫、模型和視圖、粒子效果和着色效果。

Qt Quick 使用 QML 作爲聲明語言,來設計以用戶界面爲中心的應用程序。嚴格來講,Qt Quick 是一個用於 QML 的工具包,允許以 QML 語言來開發圖形界面。當然,還有其他的工具包用於 QML:

從模塊上區分

QML 由 Qt QML 模塊提供,QtQuick QML 庫由 Qt Quick 模塊提供。

  • Qt QML 模塊:爲 QML 應用程序提供了語言和引擎基礎結構。
  • Qt Quick 模塊:提供了許多可視化組件、模型視圖支持、動畫框架以及用於構建用戶界面的更多功能。

QtQuick 1.x VS QtQuick 2.x

QtQuick 主要包括:QtQuick 1.x 和 QtQuick 2.x,它們之間的區別主要涉及以下內容:

  • 全新的 Qt 版本

    • QtQuick 1.x 基於 Qt4.x。
    • QtQuick 2.x 隨 Qt5.0 一起引入。
  • 全新的繪圖系統

    • QtQuick 1.x 使用 QGraphicsView/QPainter API 來繪製場景。
    • QtQuick 2.x 基於 Scene Graph,一個 OpenGL(ES)2.0 抽象層,對繪圖進行了高度優化,效率更高。
  • 全新的 QML 引擎

    • Qt 4.x 中,QML 引擎基於JSC(JavaScriptCore - Webkit 的 JS 引擎)。
    • Qt 5.0 中引入 V8(Google 的開源高性能 JavaScript 引擎,用 C++ 編寫,用於 Chromium、Node.js 和多個其他嵌入應用程序)。
    • Qt 5.2 中引入了 V4 JS 引擎,針對 QML 用例進行了優化,並且可以選擇關閉 JIT(Just-In-Time)編譯,以符合 iOS 和 WinRT 平臺的限制。個頭更小、反應更快、擴展性也非常好。
  • 從 Qt 5.5 開始,加入了一個新模塊 QtQuick3D,它提供使用 QML 語言創建 3D 應用程序/遊戲的能力,其使用的是一個被命名爲 FrameGraph 的新引擎,而非 Scene Graph(因爲太 2D/2.4D)。

  • 模塊、屬性和方法、類型和 API、C++ 代碼(QtDeclarative 被移除了,替代的它是Qt QML 和 Qt Quick 模塊)、QML 插件的更改。 
    ……

爲什麼要引入 QML/Qt Quick?

在我看來,主要歸結爲以下幾點:

  • 戰略性發展

    Qt 想用 QML/Qt Quick 一統天下(桌面 + 移動端)。夢想還是要有的,萬一實現了呢?

    衆所周知,Qt 爲跨平臺而生,而 QML/Qt Quick 作爲 Qt 新生力量,完完全全繼承了 Qt 包羅萬象的特點,它的誕生爲 Qt 進軍移動領域邁出了歷史性的一步。

    隨着 Qt 的不斷迭代,QML/Qt Quick 也可用於開發傳統的桌面程序,而且效率越來越高,這樣以來,便可以用 QML/Qt Quick 做任何你想做的事情。

    QML/QtQuick 作爲 Qt 的絕對核心,特別是對於界面要求較高的開發者來說,其作用更爲重要。

  • 開發效率的提升

    傳統上的 native UI 開發普遍使用 C++、C#、Objective-C 等語言。但近年來,本地應用使用 HTML5 + JS 也成爲了一種趨勢。一方面硬件資源越來越豐富,另一方面 Web 技術讓 JS 的解析速度更快。

    除此之外,其中一部分功勞要歸功於 Google,由於開源了其 NB 的 JS 引擎,Node.js 加上一個前端框架也可以開發本地應用了。例如:Electron - 構建跨平臺的桌面應用程序。

    QML/Qt Quick 和 Node.js 類似,也提供了一系列 JS 和 C++ 交互的接口,便於 JS 和 C++ 通信。

  • UI 與邏輯分離

    儘管對於大多數情況而言,在編寫應用程序時只需 QML 和 JavaScript,但在有些情況下需要計算密集型任務(例如:複雜圖像處理、物理引擎),並且將需要處理器竭力提供所有可用性能。

    在這些情況下,QML 應用開發適合使用 C++ 來進行擴展,以便在後臺執行資源密集型任務,而界面設計和一些簡單邏輯(例如:按鈕變色、換膚、變形等)都可以在 JS 中完成。這樣避免了傳統應用開發前端設計和後臺邏輯混合的情況,讓界面設計者專心設計界面成爲了可能。

    由於 QML 是在 Qt 上構建的,因此其繼承了 Qt 框架中的大部分功能,尤其是信號和槽機制以及元對象系統。使用 C++ 創建的數據可從 QML 直接訪問,而 QML 對象也可從 C++ 代碼進行訪問。

Qt Widgets VS QML/Qt Quick

Qt 4.7 發佈時,引入了 QML,用於移動開發,其全面支持觸摸操作、流暢的動畫效果等。但在 Qt 5 中,QML 已經不再侷限於移動開發,也可用於開發傳統的桌面程序。

很長時間裏,我都在使用 Qt Widgets。當第一次嘗試 QML 時,發現它太原始。但隨着 Qt 5 的持續更新,QML 已經大大改善 - 添加了更多的功能、更好的性能以及更多的平臺支持。話雖如此,但 QML/Qt Quick 仍在發展,隨着版本的更新,也會變得越來越成熟。

  • 相比之下,Qt Widgets 更“老”、更成熟,而 QML/Qt Quick 則更“新”、更“現代”。
  • 無論如何,Qt Widgets 和 QML/Qt Quick 都可以在多個平臺上使用(Windows、Linux、OS X…)。

對於傳統的桌面程序來說,優先考慮使用 Qt Widgets,若要開發更“現代”的 UI 與高級應用,建議使用 Qt5.x + QML 2.x + QtQuick 2.x。

 

對於移動端開發來說,建議使用 QML,協同 JavaScript,簡單快捷、渲染效果更佳、界面更炫酷。不建議使用 Qt Widgets,其顯示效果、適應性都不好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章