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