QML教程:Review Native Quick Widgets
在前面到系列文章中,筆者只給了Native Quick Widget二星的評價,現在看來,這是一個非常膚淺的認識,在沒有深入源碼和具體功能到前提下,僅僅依靠界面來判斷是非常愚蠢到行為。
這也提示了筆者,每個開源項目都有存在都有它到可取之處,由于開源者無私到分享,才能鑄就出更好的軟件,提供更好到代碼邏輯。
這套Native Quick Widgets也是,它的存在價值并不是提供了美侖美煥的界面,而是提供了在目前到QtQuick中缺失的幾個重要功能。
這幾個功能作為觸摸屏的移動設備開發來說,并沒有非存在不可的的價值,但是一旦將QML應用于桌面開發,就顯示出巨大的影響。
很顯然,Native Quick Widgets的作者應該是使用QML進行了桌面軟件開發或者在這方面的嘗試,因此意識到了這方面的不足,才有這套組件的出現。
首先對這套QML組件進行最基本的分析,通過閱讀源碼發現,它提供了7個自定義QML元素:
1.Button元素
2.CheckBox元素
3.CursorArea元素
4.LineEdit元素
5.MenuAction元素
6.Menu元素
7.ProgressBar元素
8.ScrollBar元素
除了這些元素,還提供了7個QML組件:
1.Button.qml
2.ContextMenu.qml
3.ProgressBar.qml
4.ScrollBar.qml
5.CheckBox.qml
6.LineEdit.qml
7.ScrollArea.qml
逐一對這些進行分析,就可以發現這些組件提供的功能對于進行桌面開發的重要意義,從上面列出的QML組件和QML元素可以抽取出這些功能點:
1.最基本的按鈕,用于用戶的事件觸發
2.輸入編輯框,用于用戶的輸入
3.進度條,用戶顯示一個事件的處理進度
4.菜單和菜單動作,用于區域的用戶事件觸發
5.滾動條和滾動區域,用于查看可視范圍外的界面
6.鼠標顯示區域,用于改變鼠標顯示的形狀
前三個功能點,并不是特別需要或者重要,因為使用原生的QML也能完成這些功能點,并且能夠編寫出非常絢麗的效果,但是下面三點就不同了。
首先應該明白QML及QtQuick這門技術的適用范圍,這是與傳統UI不同的模式,并且設計之初更像是應用于觸摸屏等移動設備,而不是桌面應用。針對這三個功能點來比較下移動設備和桌面開發的差異。
菜單功能在兩者之間的差異:
1.桌面上菜單必不可少,右鍵菜單,或者是依附按鈕的菜單,都是提供用戶進行操作的捷徑,并且,菜單往往是多級的,二三級,甚至四級菜單都會存在,而觸摸屏設備內,由于屏幕尺寸的限制,往往多是一級菜單或者是沒有菜單,基本多由按鈕來完成必要的事件觸發;
2.在桌面上,鼠標有右鍵可以觸發菜單,在觸摸屏上,操作就是點擊或者放開,這是菜單非必需的重要理由,哪怕是多點觸摸,既然可以多點觸摸了,那為什么還需要菜單還進行事件觸發呢,手勢操作會顯得更加便捷;
從這兩點就已經可以看出兩者的重大差異,更為重要的是,針對QML本身來說,由于采取的是以圖元為基礎的DirectUI,雖然可以實現自我繪制菜單,但是對于緊張的開發周期來說,這些實現的時間無疑是揮霍。
滾動功能在兩者之間的差異:
這也是桌面上必備的功能,觸摸屏設備也同樣具有,但是同樣受限于觸摸屏設備的尺寸,用戶不可能把手點在微小的滾動條上滾動,而是在滾動區域,這點在ipad上的操作就可以體現出來。可是同樣的操作拿到桌面上,雖然有慣性滾動,但是這樣的操作是現在的桌面用戶無論如何都接受不了的;
QML的基本元素中提供了滾動,但是它不適用于傳統的桌面表現形式,雖然有,但是直接應用的話,對于還在鼠標時代的桌面來說,反而提供了很差的用戶體驗。
***是鼠標區域的差異:
在桌面上,由于操作的不同,鼠標會變換形狀,提示用戶當前操作的狀態,可是在觸摸屏設備上,就是畫蛇添足了,這是非常細節的地方,但是越細節的地方才能更加體會出編寫桌面軟件和移動設備軟件的不同。
通過這些簡單的分析,就應該認識到Native Quick Widgets的意義,雖然只是簡單地引用了Qt原生部件,但是這個實現幫助使用QML開發人員省去了自己實現這些功能點的過程,節省了寶貴的開發時間。
再次表達出對開源者的尊敬,正是接近無限的開源的代碼,才鑄就了ios,android,meego,如果沒有開源,這些為人們生活提供巨大幫助和快樂的系統將不會出現。
同時也有由于Qt的存在,我們節省了造輪子的過程,才能快速地編寫出軟件,滿足用戶多變的需求。
【編輯推薦】