现在的位置: 首页 > 综合 > 正文

meego开发的学习路线

2013年03月25日 ⁄ 综合 ⁄ 共 5164字 ⁄ 字号 评论关闭

不同版本的meego系统,底层和中间层架构,大体是一致的,也是可以定制裁剪的。区别主要在最上层的用户体验层,比如handset版和notebook版的meego,UI就很不一样(UI的开发环境,也不一样),这篇文档,是针对handset版meego的学习路线,做的一个总结。后面提高到的meego,未做明确说明的情况下,都是特指handset版的meego系统。

一、基础4
I6 u# c& y' ]* C+ I) k9 F0 b


1、编程语言

;
u* m1 K* M+ L2 w; P2 r0 ~( G- A! V

!
^( U6 W% ]; ]


1.1 meego的图形界面,是基于qt开发的,不用说,C++肯定是首选的开发语言。

1.2 STL的使用。qt自己实现了一套类STL接口,和标准的STL仅有一些小的区别,而且也有api文档。之所以单独提到STL,是因为这个东西太重要的,它的核心内容,就是容器和算法,这是c++程序中最基本的数据操作,一定要掌握。(初学者,可以通过STL的中文教程来学习,然后很容易就能转到qt的类stl接口上编写代码)。

:
k- {' x' g9 B* J


1.3 meego是的中间层,不全是由qt开发的,其中的一部分,是由c语言写出来的。其实meego上很多中间层的服务程序,都是直接用的gnome桌面环境中的开源项目,而gnome的基础,就是基于c语言的gobject系统,所以,c语言也是一个重要的开发语言。*
Z7 E0 T( F/ e5 E4 H! E


但是,c并不是必须的,如果懂c,相当于锦上添花,后面在第二部分,我会详细的解释。

;
C+ d4 F+ |0 h$ O* l2 l0 K


2、明确一些概念

%
]" E' f9 O7 h3 Q) e; N


2.1 首先明确一点,qt不仅仅是用来绘图的,qt其实是一个很完善的底层库,除了绘图,qt还融合了很多和UI无关的功能,比如网络、xml、sql等等,qt都有相关的类和框架。

  Z!
B4 B  K+ Y/ x' c* X0 n


2.2 meego是基于qt的,准确点描述,可以是这样:meego继承qt,开发了一套GUI库--libmeegotouch,meego的界面,就是用libmeegotouch开发的,而隐藏在界面背后的功能性的代码,则是用qt开发的。

5
F$ A% j5 [- X/ n3 |( r


2.3 qt有一个非常好的文档系统和众多的example code,一定要充分利用。



2.4 虽然libmeegotouch也有文档和example code,但是,由于libmeegotouch仅仅是负责绘制GUI,它的example code有局限性,而且数量也较少,因此对于开发人员,一定还要通过qt example code来深入学习。

3、qt/meego基础学习



3.1 qmake的使用。qt程序使用qmake和pro文件进行工程管理。请看文档 qmake Tutorial --3
`1 d; ]5 q  X" ?( r% ]* B, ~

http://doc.qt.nokia.com/4.7/qmake-tutorial.html

(
N2 L+ `% H3 a! H4 P2 H


3.2 qt的对象系统。请看文档 Object Model --
http://doc.qt.nokia.com/4.7/object.html

和 The Property System --
http://doc.qt.nokia.com/4.7/properties.html#qt-s-property-system



3.3 qt中的信号和槽函数,这是qt的特色之一,是对c++扩充后的新概念。请看文档 Signals & Slots --
http://doc.qt.nokia.com/4.7/signalsandslots.html



3.4 qt中的事件传递和主事件循环,请看文档 The Event System --
http://doc.qt.nokia.com/4.7/eventsandfilters.html

和 Another Look at Events --+
V0 j: y( l) V; N3 a- V( L

http://doc.qt.nokia.com/qq/qq11-events.html,初学者可能会觉得这里很抽象,要理解事件循环,更基础的一个概念是文件的异步操作(select/poll/epoll
函数),这个可以随着开发的深入再慢慢体会。



3.5 qt中的容器类,这就是前面提到的qt中的类STL接口,请看文档 Container Classes --8
b( J* ~. b4 c" X# F- S8 C

http://doc.qt.nokia.com/4.7/containers.html

4、meego/qt中的widget

2
y% X. p" S/ _$ F- P( X1 o. Z


4.1 不管是哪一种GUI库,都有widget的概念,相当于windows编程中的控件。按钮、文本编辑框、下拉菜单,这些都是widget,widget概念的引入,使得图形界面编程更加的方便快捷。



4.2 qt里面,有两套绘图系统,一套是QWidget+QLayoutItem系统,这个是桌面环境编程中使用的widget,另一套是Graphics View Framework,这套系统比xserver更灵活,可以对基本的图形元素做旋转操作,也初步实现了widget的父类QGraphicsWidget,但是并没有进一步实例化。/
h) E- q. J, a. q4 Q3 q2 A+ }


关于Graphics View Framework,请看文档 Graphics View Framework --
http://doc.qt.nokia.com/4.7/graphicsview.html

0
z& `7 O8 R( y


4.3 meego是使用在小屏幕设备上的一个系统,如前所述,QWidget是为桌面环境设计的,不适合手持设备,虽然QGraphicsWidget并不完善,但是Graphics View Framework有很强的灵活性,所以meego选择从QGraphicsWidget继承,专门为小屏幕设备实现了一套widget库--MWidget。

QWidget和MWidget虽然是两套不同的widget,但是在设计理念和设计模式上,基本是相同的,尤其是layout系统,使用方法都是类似的。因此,如果已经熟悉QWidget了,则MWidget也可以很快的上手。如果是新手,则可以通过QWidget+QLayoutItem相关的技术文档来学习qt中layout的基本思路,然后再阅读MWidget的example code。下面给出一些参考文档,

Layout Management --
http://doc.qt.nokia.com/4.7/layout.html

Widgets and Layouts --%
n5 O9 c* F, ]6 d: s4 k

http://doc.qt.nokia.com/4.7/widgets-and-layouts.html;
^+ C# S4 `) g0 l1 F


MWidget Layout --
http://apidocs.meego.com/1.1/platform/html/libmeegotouch/layouts.html

Common Components  --5
q7 o4 \% g& ^+ v

http://apidocs.meego.com/1.1/platform/html/index.html



4.4 在熟悉了widget+layout的基本理念和使用方法后,就可以开始看meego的example code了,阅读libmeegotouch的源码目录中的example子目录中的代码,这是学习meego开发的最好的办法。首先推荐阅读的是example目录中的子目录  tutorial_music_catalogue,关于这个代码,可以参考文档
http://apidocs.meego.com/mtf/tutorial.html

中的介绍。

4.5 qt中的widget,数量巨多,很容易让人产生恐惧感。但是到了meego中,由于是为手持设备设计的,屏幕较小,widget的数量也少了很多,常用的widget,目前就只有10多个,像按钮、文本编辑框这一类widget,用法都很简单,很容易上手。唯一一个有一定难度的widget,就是MList,这个东西是手机上常用的一种widget,就是一个长的列表。MList使用了qt中的model/view framework,请看文档
%
n1 z6 t0 {$ H9 x# E) ]

http://doc.qt.nokia.com/4.7/model-view-programming.html。libmeegotouch源码目录example中的子目录,apscanner,是一个使用了model/view框架的例子,要通过这个代码学习MList的使用。

5、meego/qt中常用的框架、技术

6
P- D+ r1 T0 k! N1 x8 P


5.1 动画框架,qt提供了一个Animation Framework,可以让widget动起来(其实是让QObject动起来),请看文档 The Animation Framework --
http://doc.qt.nokia.com/4.7/animation-overview.html



5.2 qt中的多线程,请看文档Thread Support in Qt --(
?9 ?! y5 w$ w2 n

http://doc.qt.nokia.com/4.7/threads.html



5.3 meego是为手持设备设计的,而现在流行的手机终端,都有触摸屏,qt中,也提供了对触摸屏手势的支持,请看文档(
}1 h$ _) n# R+ U  J' q  D



Gestures Programming --.
s3 t7 g8 F3 f/ {! n: a

http://doc.qt.nokia.com/4.7/gestures-overview.html4
E! |! p/ u* {6 ?8 ?) Y7 W


Gestures and Multitouch  --3
{4 g6 y! A7 R. N# _( U) {( k! W

http://apidocs.meego.com/1.1/platform/html/index.html

%
`3 Z1 d, ]( z3 [& U0 \; O" I# h" r6 U


5.4 meego中,为widget引入了css的概念,可以用css文件来控制MWidget的许多属性,请看文档 css in meego --
http://apidocs.meego.com/1.1/platform/html/libmeegotouch/styling.html

5.5 meego的国际化处理,是基于qt的国际化方案的,请看文档%
\5 p2 u1 ~3 R* D+ ~7 D5 i



Internationalization with Qt --9
z2 G. i7 F9 L+ p! B% J

http://doc.qt.nokia.com/4.7/internationalization.html*
m5 B- v$ K6 z  I


Internationalisation Guidelines --
http://apidocs.meego.com/1.1/platform/html/libmeegotouch/i18n.html

二、深入

     前面的介绍,着重于meego开发的基本技能,尤其是widget的使用。隐藏在GUI后面的功能性代码的开发,meego也提供了很多优秀的编程框架。

1、进程间通信。linux桌面环境最常用的通信方式是dbus,而且dbus已经成为一个标准,meego自然也是使用dbus。

1.1 dbus原生是用c语言开发的,同时可以绑定到很多面向对象的编程语言之上,详细介绍,可以参考
http://www.freedesktop.org/wiki/Software/dbus

)
}# V% _8 t, @5 E


1.2 gnome桌面开发中,使用的是dbus-glib库,这个是基于gobject对象系统的c库,详细介绍,可以参考http://library.gnome.org/devel/dbus-glib/unstable/index.html

2
[+ u6 O( J5 Y" [0 v; l! p( @6 Q


1.3 qt中也绑定了dbus,详细介绍,可以参考http://doc.qt.nokia.com/4.7/intro-to-dbus.html

2、数据库

;
s* X+ R) W) Z+ h* R


2.1 meego平台上使用了一个中心数据库,tracker,这个也是gnome桌面项目中发展起来的一个技术,详细介绍,可以参考6
^. h' ]0 ]/ b! z/ C5 L

http://projects.gnome.org/tracker/



2.2 gnome桌面开发中,使用的是tracker库(基于dbus),是基于gobject对象系统的c库,可以从
<

抱歉!评论已关闭.