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