meego开发的学习路线

时间:2021-03-26 04:58:05

不同版本的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库,可以从
http://ftp.gnome.org/pub/GNOME/sources/tracker/0.9/
下载


2.3 qt也对tracker做了一个绑定,有一个libqttracker库,可以从
http://maemo.gitorious.org/maemo-af/libqttracker/trees/master& |/ ~5 c& w# P! A
下载

3、多媒体编程


3.1 qt有一套多媒体编程框架Phonon ,但是这并不是qt的最终目标。可以忽略这个框架。


3.2 qt现在有一个单独的项目,qt-mobility,其中有一个新的多媒体编程框架 Multimedia --
http://doc.qt.nokia.com/qtmobility-1.1.0/multimedia.html,这个才是qt将会主推的方案,meego上也是用的这套框架。


3.3 如果只是开发音频/视频播放器,Multimedia已经足够了,它把很多编解码的细节都隐藏了,开发者可以集中精力开发用户体验。Multimedia的后端,使用的是gstreamer,gstreamer是gnome桌面项目中发展起来的一套多媒体编解码框架,是基于gobject对象系统的c库,可以参考http://www.gstreamer.net/
,如果需要灵活的开发功能更复杂的多媒体程序,则可以使用gstreamer框架。

4、即时通讯程序

3 X) `  V6 b2 Y$ i
4.1 gnome桌面项目中,发展了一个即时通讯的库,telepathy(基于dbus),这是一个框架,可以把不同的即时通讯程序协议容括进来,可以参考
http://telepathy.freedesktop.org/wiki/

/ ]3 A0 M9 \2 `4 ^; u7 V
4.2 原生的telepathy,是基于gobject开发的c库,可以参考* {/ |* r1 ^7 t
http://telepathy.freedesktop.org/doc/telepathy-glib/
& }- x" i$ G& @9 u$ ]( e
http://telepathy.freedesktop.org/doc/book/


4.3 qt也绑定了telepathy,提供了一个c++接口,可以参考' {: \7 h1 U7 g+ Y  @$ M, a/ ~
http://telepathy.freedesktop.org/doc/telepathy-qt4/

5、meego开发中的c语言$ S  D. }0 n  Y' p
从前面介绍的4个框架来看,原生都是用c语言开发的,而且都有基于gobject系统的c接口。qt做的,主要是对这类底层库的一个上层封装,或者是编程语言的绑定。对于开发者,在学习这些框架的时候,如果了解gobject系统,学习起来肯定会更方便,而且很多可以参考的文档,也都是以c语言的原生接口为例的,包括大量的example code,也是用c写的。所以,在开发过程中,基于gobject对象系统的c编程,是开发者的第二个有力工具。


来源:http://blog.csdn.net/jack0106/archive/2011/01/20/6154197.aspx