zoukankan      html  css  js  c++  java
  • meego开发的学习路线(转)

    转载时请注明出处和作者联系方式

    文章出处:http://blog.csdn.net/jack0106 
    作者联系方式:冯牮 
    fengjian0106@yahoo.com.cn

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

    一、基础
    1、编程语言


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

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


    1.3 meego是的中间层,不全是由qt开发的,其中的一部分,是由c语言写出来的。其实meego上很多中间层的服务程序,都是直接用的gnome桌面环境中的开源项目,而gnome的基础,就是基于c语言的gobject系统,所以,c语言也是一个重要的开发语言。
    但是,c并不是必须的,如果懂c,相当于锦上添花,后面在第二部分,我会详细的解释。


    2、明确一些概念


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


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


    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 --http://doc.qt.nokia.com/4.7/qmake-tutorial.html


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


    3.5 qt中的容器类,这就是前面提到的qt中的类STL接口,请看文档 Container Classes --http://doc.qt.nokia.com/4.7/containers.html

    4、meego/qt中的widget


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


    4.2 qt里面,有两套绘图系统,一套是QWidget+QLayoutItem系统,这个是桌面环境编程中使用的widget,另一套是Graphics View Framework,这套系统比xserver更灵活,可以对基本的图形元素做旋转操作,也初步实现了widget的父类QGraphicsWidget,但是并没有进一步实例化。
    关于Graphics View Framework,请看文档 Graphics View Framework --http://doc.qt.nokia.com/4.7/graphicsview.html


    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 -- http://doc.qt.nokia.com/4.7/widgets-and-layouts.html
    MWidget Layout -- http://apidocs.meego.com/1.1/platform/html/libmeegotouch/layouts.html
    Common Components  -- 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,请看文档  http://doc.qt.nokia.com/4.7/model-view-programming.html。libmeegotouch源码目录example中的子目录,apscanner,是一个使用了model/view框架的例子,要通过这个代码学习MList的使用。

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


    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 -- http://doc.qt.nokia.com/4.7/threads.html


    5.3 meego是为手持设备设计的,而现在流行的手机终端,都有触摸屏,qt中,也提供了对触摸屏手势的支持,请看文档 
    Gestures Programming -- http://doc.qt.nokia.com/4.7/gestures-overview.html
    Gestures and Multitouch  -- http://apidocs.meego.com/1.1/platform/html/index.html


    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的国际化方案的,请看文档 
    Internationalization with Qt -- http://doc.qt.nokia.com/4.7/internationalization.html
    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


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


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

    2、数据库


    2.1 meego平台上使用了一个中心数据库,tracker,这个也是gnome桌面项目中发展起来的一个技术,详细介绍,可以参考 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 下载

    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、即时通讯程序


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


    4.2 原生的telepathy,是基于gobject开发的c库,可以参考 http://telepathy.freedesktop.org/doc/telepathy-glib/和 http://telepathy.freedesktop.org/doc/book/


    4.3 qt也绑定了telepathy,提供了一个c++接口,可以参考 http://telepathy.freedesktop.org/doc/telepathy-qt4/

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



    Wangkeke 2011-10-28 23:00 发表评论
  • 相关阅读:
    flask项目--认证方案Json Web Token(JWT)
    分布式设计-集群
    分布式设计-哨兵
    分布式设计--数据库主从
    leetcode 221 Maximal Square
    LeetCode222 Count Complete Tree Nodes
    在windows 、linux下读取目录下所有文件名
    leetcode 229 Majority Element II
    leetcode 233 Number of Digit One
    leetcode 238 Product of Array Except Self
  • 原文地址:https://www.cnblogs.com/cokecoffe/p/2537128.html
Copyright © 2011-2022 走看看