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 发表评论
  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/cokecoffe/p/2537128.html
Copyright © 2011-2022 走看看