日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt Widgets、QML、Qt Quick的概念与区别

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt Widgets、QML、Qt Quick的概念与区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1

QML 和 Qt Quick 是什么關系?

從概念上區分

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

這里,主要涉及兩點:
?


  • 用戶界面規范:QML 提供了一種高度可讀的、聲明式的、類似 JSON 的語法,支持命令式?JavaScript 表達式和動態屬性綁定。

  • 標記語言:像 C++ 一樣,QML 也是一種語言,它的文件以 .qml 結尾。


  • Qt Quick 是 QML 類型和功能的標準庫,它包括視覺類型、交互類型、動畫、模型和視圖、粒子效果和著色效果(可以使用 import 語句訪問所有這些功能)。

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


    • 圖形化的(例如:Sailfish Silica 或 BlackBerry Cascades)

    • 非圖形的(例如:QBS - QMake/CMake/make ... 的一個替代品)


    從模塊上區分

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


    • Qt QML 模塊:為 QML 應用程序提供了語言和引擎基礎結構。

    • Qt Quick 模塊:提供了許多可視化組件、模型視圖支持、動畫框架以及用于構建用戶界面的更多功能。



    總之,GUI 模塊是 Qt Quick,QML 是標記語言,它包含一個 JavaScript 運行時來執行 JavaScript,還可以將 QML/JavaScript 代碼與 C++ 代碼集成在一起。

    2

    QtQuick 1.x 和 QtQuick 2.x 有什么差異?

    QtQuick 主要包含 1.x 和 2.x,它們之間的主要區別是:
    ?


    • 全新的 Qt 版本

      QtQuick 1.x 基于 Qt 4.x;

      QtQuick 2.x 隨 Qt 5.0 一起引入。

    ?


    • 全新的繪圖系統

      QtQuick 1.x 使用 QGhicsView/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 插件的更改。

    ?


    • ......



    3

    為什么要引入 QML/Qt Quick?

    既然有了 Qt Widgets,為什么還要引入 QML/Qt Quick 呢?主要有以下幾方面原因:
    ?


    • 戰略性發展



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

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

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

    QML/Qt Quick 作為 Qt 的核心,特別是對于界面要求較高的開發者來說,其作用尤為重要。
    ?


    • 開發效率的提升



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

    除此之外,其中一部分功勞要歸功于 Google,由于其開源強大(niu?bi)的 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++ 代碼進行訪問。

    4

    Qt Widgets 和 Qt Quick 有什么區別?

    那么,Qt Widgets 和 Qt Quick 之間都有哪些區別呢?從以下幾點說起!
    ?


    • 語言編碼



    Qt Widgets 主要使用 C++ 代碼(PyQt 和 PySide - Qt 的 Python 綁定,使用的是 Python)。

    Qt Quick 主要使用 QML 和 JavaScript。
    ?


    • 性能差異



    與 Qt Quick 相比,Qt Widgets 更底層一些。但從長遠角度來看,Qt Widgets 性能更好、運行得更快。當然,處于底層是有好處的,這可以讓 Qt Widgets 更多地暴露于?native API?(QtCore 模塊、Qt Style Sheets 等)。也就是說,它常用于桌面開發。

    Qt Quick 更適合移動開發(盡管可用于桌面開發),它有隨時可用的彈出窗口、動畫、滑動、抽屜和常用控件,在移動開發中無處不在。
    ?


    • UI 設計



    它們都可以與 Qt Designer 一起工作,并生成相應的 ui 文件(在 Qt Widgets 中,文件后綴是 .ui;而在 Qt Quick 中,文件后綴是 .ui.qml),為設置布局和創建接口提供了一個高級視圖。

    ui 文件不是強制性的,也不是必需的,可以選擇使用?C++/Python??或 QML/JS?以編程方式進行設計和布局。

    5

    Qt Widgets 和 Qt Quick 該如何選擇?

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

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

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

    對于傳統的桌面程序來說,應優先考慮使用 Qt Widgets,若要開發更現代的 UI 與高級應用,建議使用 Qt Quick。

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

    6

    給新手的建議

    如果你對編程完全陌生,建議先從 Qt Quick 學起。就個人而言,我認為 Qt Quick 有一個更溫和的學習曲線,更容易用它來快速完成項目。想想看,能被稱為 Quick 一定是有原因的(不過,也不要小看 Qt Widgets,它也有一些比 Qt Quick 更棒的模塊)。

    但是,如果你以前使用過 C++ 或 Python,建議先看看 Qt Widgets,并熟悉它里面的一些核心機制(例如:事件、信號槽),以及必要的模塊(例如:gui、network)。

    最后,無論選擇 Qt Widget 還是 Qt Quick,都不用太過擔心上手的問題,因為 Qt 提供了豐富的示例

    總結

    以上是生活随笔為你收集整理的Qt Widgets、QML、Qt Quick的概念与区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。