在前面到系列文章中,笔者只给了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的存在,我们节省了造轮子的过程,才能快速地编写出软件,满足用户多变的需求。
【编辑推荐】