• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            厚積薄發(fā),滴水穿石

            搬家到主站了:http://www.cnblogs.com/cokecoffe/
            隨筆 - 45, 文章 - 8, 評(píng)論 - 12, 引用 - 0
            數(shù)據(jù)加載中……

            meego開(kāi)發(fā)的學(xué)習(xí)路線(轉(zhuǎn))

            轉(zhuǎn)載時(shí)請(qǐng)注明出處和作者聯(lián)系方式

            文章出處:http://blog.csdn.net/jack0106 
            作者聯(lián)系方式:馮牮 
            fengjian0106@yahoo.com.cn

             

                 不同版本的meego系統(tǒng),底層和中間層架構(gòu),大體是一致的,也是可以定制裁剪的。區(qū)別主要在最上層的用戶體驗(yàn)層,比如handset版和notebook版的meego,UI就很不一樣(UI的開(kāi)發(fā)環(huán)境,也不一樣),這篇文檔,是針對(duì)handset版meego的學(xué)習(xí)路線,做的一個(gè)總結(jié)。后面提高到的meego,未做明確說(shuō)明的情況下,都是特指handset版的meego系統(tǒng)。

             

            一、基礎(chǔ)
            1、編程語(yǔ)言


            1.1 meego的圖形界面,是基于qt開(kāi)發(fā)的,不用說(shuō),C++肯定是首選的開(kāi)發(fā)語(yǔ)言。

            1.2 STL的使用。qt自己實(shí)現(xiàn)了一套類STL接口,和標(biāo)準(zhǔn)的STL僅有一些小的區(qū)別,而且也有api文檔。之所以單獨(dú)提到STL,是因?yàn)檫@個(gè)東西太重要的,它的核心內(nèi)容,就是容器和算法,這是c++程序中最基本的數(shù)據(jù)操作,一定要掌握。(初學(xué)者,可以通過(guò)STL的中文教程來(lái)學(xué)習(xí),然后很容易就能轉(zhuǎn)到qt的類stl接口上編寫代碼)。


            1.3 meego是的中間層,不全是由qt開(kāi)發(fā)的,其中的一部分,是由c語(yǔ)言寫出來(lái)的。其實(shí)meego上很多中間層的服務(wù)程序,都是直接用的gnome桌面環(huán)境中的開(kāi)源項(xiàng)目,而gnome的基礎(chǔ),就是基于c語(yǔ)言的gobject系統(tǒng),所以,c語(yǔ)言也是一個(gè)重要的開(kāi)發(fā)語(yǔ)言。
            但是,c并不是必須的,如果懂c,相當(dāng)于錦上添花,后面在第二部分,我會(huì)詳細(xì)的解釋。

             

             


            2、明確一些概念


            2.1 首先明確一點(diǎn),qt不僅僅是用來(lái)繪圖的,qt其實(shí)是一個(gè)很完善的底層庫(kù),除了繪圖,qt還融合了很多和UI無(wú)關(guān)的功能,比如網(wǎng)絡(luò)、xml、sql等等,qt都有相關(guān)的類和框架。


            2.2 meego是基于qt的,準(zhǔn)確點(diǎn)描述,可以是這樣:meego繼承qt,開(kāi)發(fā)了一套GUI庫(kù)--libmeegotouch,meego的界面,就是用libmeegotouch開(kāi)發(fā)的,而隱藏在界面背后的功能性的代碼,則是用qt開(kāi)發(fā)的。


            2.3 qt有一個(gè)非常好的文檔系統(tǒng)和眾多的example code,一定要充分利用。


            2.4 雖然libmeegotouch也有文檔和example code,但是,由于libmeegotouch僅僅是負(fù)責(zé)繪制GUI,它的example code有局限性,而且數(shù)量也較少,因此對(duì)于開(kāi)發(fā)人員,一定還要通過(guò)qt example code來(lái)深入學(xué)習(xí)。

             

            3、qt/meego基礎(chǔ)學(xué)習(xí)


            3.1 qmake的使用。qt程序使用qmake和pro文件進(jìn)行工程管理。請(qǐng)看文檔 qmake Tutorial --http://doc.qt.nokia.com/4.7/qmake-tutorial.html


            3.2 qt的對(duì)象系統(tǒng)。請(qǐng)看文檔 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中的信號(hào)和槽函數(shù),這是qt的特色之一,是對(duì)c++擴(kuò)充后的新概念。請(qǐng)看文檔 Signals & Slots --http://doc.qt.nokia.com/4.7/signalsandslots.html


            3.4 qt中的事件傳遞和主事件循環(huán),請(qǐng)看文檔 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,初學(xué)者可能會(huì)覺(jué)得這里很抽象,要理解事件循環(huán),更基礎(chǔ)的一個(gè)概念是文件的異步操作(select/poll/epoll 函數(shù)),這個(gè)可以隨著開(kāi)發(fā)的深入再慢慢體會(huì)。


            3.5 qt中的容器類,這就是前面提到的qt中的類STL接口,請(qǐng)看文檔 Container Classes --http://doc.qt.nokia.com/4.7/containers.html

             

            4、meego/qt中的widget


            4.1 不管是哪一種GUI庫(kù),都有widget的概念,相當(dāng)于windows編程中的控件。按鈕、文本編輯框、下拉菜單,這些都是widget,widget概念的引入,使得圖形界面編程更加的方便快捷。


            4.2 qt里面,有兩套繪圖系統(tǒng),一套是QWidget+QLayoutItem系統(tǒng),這個(gè)是桌面環(huán)境編程中使用的widget,另一套是Graphics View Framework,這套系統(tǒng)比xserver更靈活,可以對(duì)基本的圖形元素做旋轉(zhuǎn)操作,也初步實(shí)現(xiàn)了widget的父類QGraphicsWidget,但是并沒(méi)有進(jìn)一步實(shí)例化。
            關(guān)于Graphics View Framework,請(qǐng)看文檔 Graphics View Framework --http://doc.qt.nokia.com/4.7/graphicsview.html


            4.3 meego是使用在小屏幕設(shè)備上的一個(gè)系統(tǒng),如前所述,QWidget是為桌面環(huán)境設(shè)計(jì)的,不適合手持設(shè)備,雖然QGraphicsWidget并不完善,但是Graphics View Framework有很強(qiáng)的靈活性,所以meego選擇從QGraphicsWidget繼承,專門為小屏幕設(shè)備實(shí)現(xiàn)了一套widget庫(kù)--MWidget。

            QWidget和MWidget雖然是兩套不同的widget,但是在設(shè)計(jì)理念和設(shè)計(jì)模式上,基本是相同的,尤其是layout系統(tǒng),使用方法都是類似的。因此,如果已經(jīng)熟悉QWidget了,則MWidget也可以很快的上手。如果是新手,則可以通過(guò)QWidget+QLayoutItem相關(guān)的技術(shù)文檔來(lái)學(xué)習(xí)qt中l(wèi)ayout的基本思路,然后再閱讀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的基本理念和使用方法后,就可以開(kāi)始看meego的example code了,閱讀libmeegotouch的源碼目錄中的example子目錄中的代碼,這是學(xué)習(xí)meego開(kāi)發(fā)的最好的辦法。首先推薦閱讀的是example目錄中的子目錄  tutorial_music_catalogue,關(guān)于這個(gè)代碼,可以參考文檔http://apidocs.meego.com/mtf/tutorial.html 中的介紹。

             

            4.5 qt中的widget,數(shù)量巨多,很容易讓人產(chǎn)生恐懼感。但是到了meego中,由于是為手持設(shè)備設(shè)計(jì)的,屏幕較小,widget的數(shù)量也少了很多,常用的widget,目前就只有10多個(gè),像按鈕、文本編輯框這一類widget,用法都很簡(jiǎn)單,很容易上手。唯一一個(gè)有一定難度的widget,就是MList,這個(gè)東西是手機(jī)上常用的一種widget,就是一個(gè)長(zhǎng)的列表。MList使用了qt中的model/view framework,請(qǐng)看文檔  http://doc.qt.nokia.com/4.7/model-view-programming.html。libmeegotouch源碼目錄example中的子目錄,apscanner,是一個(gè)使用了model/view框架的例子,要通過(guò)這個(gè)代碼學(xué)習(xí)MList的使用。

             

             

            5、meego/qt中常用的框架、技術(shù)


            5.1 動(dòng)畫(huà)框架,qt提供了一個(gè)Animation Framework,可以讓widget動(dòng)起來(lái)(其實(shí)是讓QObject動(dòng)起來(lái)),請(qǐng)看文檔 The Animation Framework -- http://doc.qt.nokia.com/4.7/animation-overview.html


            5.2 qt中的多線程,請(qǐng)看文檔Thread Support in Qt -- http://doc.qt.nokia.com/4.7/threads.html


            5.3 meego是為手持設(shè)備設(shè)計(jì)的,而現(xiàn)在流行的手機(jī)終端,都有觸摸屏,qt中,也提供了對(duì)觸摸屏手勢(shì)的支持,請(qǐng)看文檔 
            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文件來(lái)控制MWidget的許多屬性,請(qǐng)看文檔 css in meego -- http://apidocs.meego.com/1.1/platform/html/libmeegotouch/styling.html

            5.5 meego的國(guó)際化處理,是基于qt的國(guó)際化方案的,請(qǐng)看文檔 
            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開(kāi)發(fā)的基本技能,尤其是widget的使用。隱藏在GUI后面的功能性代碼的開(kāi)發(fā),meego也提供了很多優(yōu)秀的編程框架。

            1、進(jìn)程間通信。linux桌面環(huán)境最常用的通信方式是dbus,而且dbus已經(jīng)成為一個(gè)標(biāo)準(zhǔn),meego自然也是使用dbus。

            1.1 dbus原生是用c語(yǔ)言開(kāi)發(fā)的,同時(shí)可以綁定到很多面向?qū)ο蟮木幊陶Z(yǔ)言之上,詳細(xì)介紹,可以參考http://www.freedesktop.org/wiki/Software/dbus


            1.2 gnome桌面開(kāi)發(fā)中,使用的是dbus-glib庫(kù),這個(gè)是基于gobject對(duì)象系統(tǒng)的c庫(kù),詳細(xì)介紹,可以參考http://library.gnome.org/devel/dbus-glib/unstable/index.html


            1.3 qt中也綁定了dbus,詳細(xì)介紹,可以參考http://doc.qt.nokia.com/4.7/intro-to-dbus.html

             

            2、數(shù)據(jù)庫(kù)


            2.1 meego平臺(tái)上使用了一個(gè)中心數(shù)據(jù)庫(kù),tracker,這個(gè)也是gnome桌面項(xiàng)目中發(fā)展起來(lái)的一個(gè)技術(shù),詳細(xì)介紹,可以參考 http://projects.gnome.org/tracker/


            2.2 gnome桌面開(kāi)發(fā)中,使用的是tracker庫(kù)(基于dbus),是基于gobject對(duì)象系統(tǒng)的c庫(kù),可以從http://ftp.gnome.org/pub/GNOME/sources/tracker/0.9/ 下載


            2.3 qt也對(duì)tracker做了一個(gè)綁定,有一個(gè)libqttracker庫(kù),可以從 http://maemo.gitorious.org/maemo-af/libqttracker/trees/master 下載

             

            3、多媒體編程


            3.1 qt有一套多媒體編程框架Phonon ,但是這并不是qt的最終目標(biāo)。可以忽略這個(gè)框架。


            3.2 qt現(xiàn)在有一個(gè)單獨(dú)的項(xiàng)目,qt-mobility,其中有一個(gè)新的多媒體編程框架 Multimedia --http://doc.qt.nokia.com/qtmobility-1.1.0/multimedia.html,這個(gè)才是qt將會(huì)主推的方案,meego上也是用的這套框架。


            3.3 如果只是開(kāi)發(fā)音頻/視頻播放器,Multimedia已經(jīng)足夠了,它把很多編解碼的細(xì)節(jié)都隱藏了,開(kāi)發(fā)者可以集中精力開(kāi)發(fā)用戶體驗(yàn)。Multimedia的后端,使用的是gstreamer,gstreamer是gnome桌面項(xiàng)目中發(fā)展起來(lái)的一套多媒體編解碼框架,是基于gobject對(duì)象系統(tǒng)的c庫(kù),可以參考http://www.gstreamer.net/ ,如果需要靈活的開(kāi)發(fā)功能更復(fù)雜的多媒體程序,則可以使用gstreamer框架。

             

            4、即時(shí)通訊程序


            4.1 gnome桌面項(xiàng)目中,發(fā)展了一個(gè)即時(shí)通訊的庫(kù),telepathy(基于dbus),這是一個(gè)框架,可以把不同的即時(shí)通訊程序協(xié)議容括進(jìn)來(lái),可以參考 http://telepathy.freedesktop.org/wiki/


            4.2 原生的telepathy,是基于gobject開(kāi)發(fā)的c庫(kù),可以參考 http://telepathy.freedesktop.org/doc/telepathy-glib/和 http://telepathy.freedesktop.org/doc/book/


            4.3 qt也綁定了telepathy,提供了一個(gè)c++接口,可以參考 http://telepathy.freedesktop.org/doc/telepathy-qt4/

             

            5、meego開(kāi)發(fā)中的c語(yǔ)言
            從前面介紹的4個(gè)框架來(lái)看,原生都是用c語(yǔ)言開(kāi)發(fā)的,而且都有基于gobject系統(tǒng)的c接口。qt做的,主要是對(duì)這類底層庫(kù)的一個(gè)上層封裝,或者是編程語(yǔ)言的綁定。對(duì)于開(kāi)發(fā)者,在學(xué)習(xí)這些框架的時(shí)候,如果了解gobject系統(tǒng),學(xué)習(xí)起來(lái)肯定會(huì)更方便,而且很多可以參考的文檔,也都是以c語(yǔ)言的原生接口為例的,包括大量的example code,也是用c寫的。所以,在開(kāi)發(fā)過(guò)程中,基于gobject對(duì)象系統(tǒng)的c編程,是開(kāi)發(fā)者的第二個(gè)有力工具。

            posted on 2011-10-28 23:00 Wangkeke 閱讀(652) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C

            日日狠狠久久偷偷色综合96蜜桃| 少妇高潮惨叫久久久久久| 99久久精品费精品国产一区二区| 无码AV波多野结衣久久| 国产精品久久成人影院| 久久亚洲AV无码西西人体| 99久久99久久精品国产片果冻| 久久伊人精品青青草原高清| 狠狠精品久久久无码中文字幕 | 精品久久香蕉国产线看观看亚洲| 久久成人18免费网站| 久久免费的精品国产V∧| 久久99精品久久久久久水蜜桃| 亚洲人成无码久久电影网站| 国产精品久久久久jk制服| 亚洲人成无码久久电影网站| 国产精品成人精品久久久| 香蕉久久av一区二区三区| 亚洲国产精品一区二区三区久久| 狠狠色综合久久久久尤物| 久久精品国产亚洲av水果派| 久久婷婷五月综合97色直播| 国产精品九九久久免费视频| 国内精品久久久久影院日本| 国产成人精品久久| 欧美与黑人午夜性猛交久久久| 狠色狠色狠狠色综合久久| 伊人久久大香线蕉av不卡| 午夜精品久久久久久久无码| 国产精品久久久天天影视香蕉| 亚洲乱码中文字幕久久孕妇黑人 | 人妻少妇久久中文字幕 | 国产精品视频久久| 亚洲国产另类久久久精品小说 | 精品久久久久久亚洲精品 | 国产欧美一区二区久久| 精品综合久久久久久888蜜芽| 亚洲精品蜜桃久久久久久| 久久久久亚洲AV无码麻豆| 久久精品青青草原伊人| 色99久久久久高潮综合影院|