01【原創(chuàng)】QWidget如何平滑過渡到Qt Quick

Qt Quick優(yōu)勢

1.在以往項目的開發(fā)過程中,對于PC端 UI的需求,我們使用QWidget完全能夠在主流桌面操作系統(tǒng)上實現(xiàn)跨平臺的開發(fā)工作;但是當遇到可觸碰交互的用戶界面,并要求在除了主流桌面操作系統(tǒng),在移動操作系統(tǒng)上也要實現(xiàn)可觀的產(chǎn)品時,Qt Quick的適配性更好

2.同時使用C++與Qt標記性語言QML,如果你已經(jīng)熟悉了這套開發(fā)流程,你會發(fā)現(xiàn)這種相較于原有QWidget的開發(fā),這種開發(fā)對View模塊的隔離更加徹底,后端應用邏輯使用C++,QML開發(fā)用戶界面,并有MVD模式可以使用,大大提高開發(fā)效率

3.Qt Quick默認使用OpenGL ES,渲染效率很高,并且提供了屬性動畫等基本動畫對象以及用于組合多個動畫對象的分組動畫對象,在實現(xiàn)有關(guān)動畫方面的需求,會更加方便

在原有QWiget項目中嵌入Qt Quick

如果當前的需求僅僅是要開發(fā)一個新的產(chǎn)品或者一個全新的模塊,建議直接選擇Qt Quick;但是在實際的業(yè)務場景里,我們往往會遇到,由于QWidget完成的項目業(yè)務積累足夠龐大,導致部分需求的開發(fā)使用Quick開發(fā)成本過高,所以下面我會根據(jù)實際的業(yè)務開發(fā)場景給出兩個技術(shù)方案供選擇。

方案1.業(yè)務不是很獨立,是原有業(yè)務的一部分,并且依賴QWidget的組件,以及QWidget的屬性,使用QQuickWidget

了解QQuickWidget,打開Qt幫助文檔通過索引搜索QQuickWidget,會看到非常詳細的官方解釋:TheQQuickWidgetclass provides a widget for displaying a Qt Quick user interface。也就是說我們在能夠兼容所有的QWidget屬性以及與原有QWidget組件進行無差別銜接的同時,可以使用QML進行界面的編寫。但是一定要打開更多來觀看更詳細的Detailed Description,因為這里會有幾個關(guān)鍵Note,告訴我們對原有QWidget業(yè)務進行無縫銜接的同時,使用QML要付出的代價。

Note1:QQuickWidget的靈活,是以犧牲性能為代價的。與QQuickWindow和QQuickView不同,QQuickWidget涉及渲染到render到OOpenGL幀緩沖區(qū)對象,這個會帶來輕微的性能損失(這里可以埋個坑,后續(xù)一起討論QQuick的渲染機制)

Note2:QQuickWidget將禁用所有平臺上的線程render loop,例如Animator類和vsync驅(qū)動的動畫不能使用

Note3:避免在QQuickWidget上調(diào)用winId()。這個函數(shù)會觸發(fā)本機窗口的創(chuàng)建,導致性能降低,并可能出現(xiàn)渲染問題。

所以在使用QQuickWidget的靈活性的同時,要謹記以上三個Note

方案2.全新的項目或者非常獨立的業(yè)務,使用QQuickView,將會使用原汁原味的QML與C++進行混合開發(fā)

了解QQuickView,同樣打開Qt幫助文檔通過索引搜索QQuickWidget(無論了解什么,先去Qt幫助文檔查詢)TheQQuickViewclass provides a window for displaying a Qt Quick user interface.點擊更多查看詳細信息。QQuickView是QQuickWindow的派生類,當給定主源文件的URL時候,會自動加載顯示QML場景。

總結(jié):無論是QQuickWidget還是QQuickVIew,在編碼過程中的使用大同小異,通過代碼編寫發(fā)現(xiàn)問題,解決問題。

參考資料

【1】QmlBook-In-Chinese 第二章 Get Start

【2】Qt Quick核心編程 第一章 Qt Quick 概覽

【3】Qt Quick核心編程 第四章 Qt Quick 入門

【4】Qt Assistant QQuickWidget,QQuickView

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Qt/QML 編碼規(guī)范 一. 概述 良好的編碼規(guī)范可以大幅提高程序的可讀和可理解性,最終目標是實現(xiàn)更友好的可維護性...
    趙者也閱讀 2,528評論 0 5
  • 嵌入式Linux的Qt 在嵌入式Linux系統(tǒng)上,可以使用多個平臺插件:EGLFS,LinuxFB,DirectF...
    YottaYuan閱讀 18,457評論 0 9
  • 2.概覽 本章將介紹如果開始使用 Qt 5 進行開發(fā)。將展示如何安裝 Qt SDK,以及如何使用 Qt Creat...
    趙者也閱讀 1,643評論 3 2
  • Qt 5 與 Qt 4 最大的一個區(qū)別之一是底層架構(gòu)有了修改。Qt 5 引入了模塊化的概念,將眾多功能細分到幾個模...
    飛揚code閱讀 1,444評論 1 3
  • 大家好,我是吉米,這是一系列Qt Quick相關(guān)技術(shù)教程的首篇。這個教程構(gòu)思已久,卻從未動手,被自己的拖延癥再一次...
    吉米有態(tài)度閱讀 9,991評論 1 7

友情鏈接更多精彩內(nèi)容