很多人不了解Qt Quick和Qml,還有很多人對其存在偏見。這篇文章就是來向這些有困惑的人介紹一下其是什么,有什么特點。
首先,這兩個是一個東西嗎?
答案:是的。但是,具體來說,Qt Quick是框架,qml是語言。Qt Quick是用C++搭建起來的一套DirectUI/Immediate UI框架,在這個框架上可以用和js語法一樣的qml語言開發界面。
和原來的QWidgets框架有什么關系嗎?
答案是沒有。這個估計讓很多人失望,我一開始也是以為Qt Quick就是QWidgets的演進版,只不過用js替代了原有的ui.xml文件。實際上,Qt Quick是一個新框架,它僅僅繼承了QT原有的元對象系統,也就帶信號槽的對象系統,其他的理念都是新的。了解DirectUI的同學肯定知道DirectUI和經典的GUI庫,如MFC、WTL的區別。DirectUI把所有控件都在一個主窗口的繪制事件里繪制,從硬件原理上說就是界面是統一刷新的,而不是根據事件選擇部分區域刷新。這樣的好處是這些控件容易協作變化,特別適合制作動態界面,例如控件拖拽、變形、變色、皮膚、透明、3D等等。
為什么要引入qml或者說javascript?
答案是提高開發效率。傳統上native的UI開發普遍使用C++,C#,java或者Objective-C,基本上是一類語言,就是靜態語言。但是近年來本地應用也有使用HTML5+js的趨勢。這個趨勢一是因為web技術讓js的解析速度更快了,另一方面是硬件資源越來越豐富了。當然最關鍵的是google開源了其牛逼的js引擎。Node.js加上一個前端框架也可以開發本地應用了。而QT Quick的目的就是提供一套類似的但是集成程度更高的解決方案,Qt Quick內部集成了google V8引擎作為qml的解釋器,摒棄了html,起而代之的是直接使用js作為UI的設計語言,qml的意思是Qt Markable Language。和Node.js類似,Qt Quick也提供了一系列js和C++交互的接口,便於js和C++通信。復雜邏輯、文件系統、網絡通信、傳感器(像攝像頭)的操作都可以在C++側完成。而界面設計和一些簡單邏輯(例如按鈕變色、換膚、變形等)都可以在js側完成。這樣避免了傳統上本地應用開發前端設計和后台邏輯混合的情況,讓界面設計者專心設計界面成為了可能。由於C++提供了內存的快速操作方法(也可以使用js的Typed Array),這種方案的開發效率更高、運行速度還不慢。
只有移動端適合用Qt Quick嗎
答案是否定的。我自己就是使用Qt Quick開發桌面應用的,而且很重型,還是實時的。Qt Quick適合桌面的開發,不僅僅是因為Qt Quick提供了js和C++的交互接口,而且是因為越來越多的桌面應用需要動態界面,有的還是3D界面。如前文所說,Qt Quick的優點就在於它是DirectUI,其構造界面的機制充分考慮了控件實時動態變化的情形,所以只要是應用是動態界面,那么Qt Quick就是適合的,例如仿真系統、監控系統、游戲等等。那么,有什么應用是不適合的嗎,當然,如果界面中有大量靜態控件,例如郵箱,表格或者像Ps這樣按鈕特別多的復雜界面就是靜態界面,界面中有大片的區域不需要刷新,那么就不適合用Qt Quick,因為全局刷新會消耗更多CPU和內存資源。
--------------------- 作者:Tumiz 來源:CSDN 原文:https://blog.csdn.net/tumiz/article/details/53445196?utm_source=copy 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
