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