成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用QML語言開發MeeGo應用程序

移動開發
Qt Declarative UI 傳得沸沸揚揚,卻很少有中文資料介紹這是一個什么樣的技術,以及如何使用它。偶爾能搜到幾篇也是掐頭去尾的,讓人摸不著頭腦。這個入門教程來自于Qt官方文檔,更多的是語法性的介紹。

Qt Declarative UI 傳得沸沸揚揚,卻很少有中文資料介紹這是一個什么樣的技術,以及如何使用它。偶爾能搜到幾篇也是掐頭去尾的,讓人摸不著頭腦。這個入門教程來自于Qt官方文檔,更多的是語法性的介紹。

什么是QML?

QML是一種描述應用程序UI的聲明式語言、腳本語言,文件格式以.qml結尾包括應用程序的外觀(菜單、按鈕、布局等)以及行為(點擊事件)的描述。在QML中,UI界面被描述成一種樹狀的帶屬性對象的結構。如果對HTML和CSS等Web技術有所理解是會有幫助的,但不是必需的。語法格式非常像CSS(參考后文具體例子),但又支持javacript形式的編程控制。

上面是官方介紹的前兩段,QML實際上是Qt Quick(Qt4.7.0中的新特性)核心組件之一:Qt Quick是一組旨在幫助開發者創建在移動電話,媒體播放器,機頂盒和其他便攜設備上使用越來越多的直觀、現代、流暢UI的工具集合。Qt Quick包括一組豐富的用戶界面元素,一種用于描述用戶界面的聲明性語言(QML)及運行時,一組用于將這些高層次特性集成到經典的Qt應用程序的 C++ API。

從官方的介紹可以看出,Qt Quick是為移動平臺快速開發所量身打造的,先看一個實際例子:在MeeGo上運行的MeeNotes,除了業務邏輯,界面UI都是使用QML實現的

MeeNotes運行效果
MeeNotes運行效果

橫豎屏幕切換
橫豎屏幕切換

在模擬器中運行效果
在模擬器中運行效果

MeeNotes可以在這里找到:使用git把qt-components和meenotes clone下來,然后先編譯qt-components,這個依賴于qt4.7,是使用QML快速開發meego應用程序的關鍵,它實現了一套meego的QML Module,之后可以編譯運行下MeeNotes,如果運行不了,請檢查Qt安裝目錄里是否有 com.nokia.meego這個module(我的位于/usr/local/Trolltech/Qt-4.7.0/imports/com /meego)如果沒有,則需要在qt-components解壓目錄下的 src/MeeGo 手動執行qmake/make/make install,進行編譯安裝。

簡單看看MeeNotes下的實際代碼

src目錄下的src.pro,紅色部分即是與使用libmeegotouch開發所不同之處 :

  1. TEMPLATE = app    
  2. TARGET = ../MeeNotes    
  3. LIBS += -lQtComponents      
  4. HEADERS += models/meenotesmodel.h \    
  5.           models/notemodel.h    
  6. SOURCES += main.cpp \    
  7.           models/meenotesmodel.cpp \    
  8.           models/notemodel.cpp    
  9. QT += declarative  

再看主入口main.cpp:

  1. #include "models/meenotesmodel.h"    
  2. #include <QApplication>    
  3. #include <QDeclarativeContext>      
  4. #include <QDeclarativeComponent>      
  5. #include <QDir>    
  6. #include <QtComponents/qdeclarativewindow.h>     
  7. int main(int argc, char **argv)    
  8. {    
  9.         QApplication app(argc, argv);    
  10.         app.setApplicationName("MeeNotes");   
  11.     
  12.         //MeeNotesModel 是Model類  
  13.         qmlRegisterType<NoteModel>();    
  14.         MeeNotesModel model;    
  15.         model.setSource("notes/");  
  16.         //在哪查找main.qml  
  17. #ifndef MEENOTES_RESOURCE_DIR    
  18.           const QDir dir(QApplication::applicationDirPath());    
  19.           const QUrl qmlPath(dir.absoluteFilePath("resource/default/main.qml"));     
  20. #else    
  21.           const QDir dir(MEENOTES_RESOURCE_DIR);    
  22.           const QUrl qmlPath(dir.absoluteFilePath("main.qml"));     
  23. #endif    
  24.         //創建能夠解釋qml運行的window  
  25.         QDeclarativeWindow window(qmlPath);     
  26.          window.rootContext()->setContextProperty("meenotes", &model);    
  27.          window.window()->show();    
  28.          return app.exec();    
  29. }  

查看main.qml:

  1. import Qt 4.7    
  2. import com.meego 1.0      
  3. Window {    
  4.    id: window    
  5.    Component.onCompleted: {    
  6.        window.nextPage(Qt.createComponent("NoteList.qml"))      
  7.    }    
  8. }  

查看NoteList.qml:

  1. import Qt 4.7    
  2. import com.meego 1.0    
  3. Page {    
  4.    title: "MeeNotes"    
  5.    actions: [    
  6.        Action {    
  7.            iconId: "icon-m-toolbar-add" //新建note按鈕的處理      
  8.            onTriggered: {    
  9.                var note = meenotes.newNote();    
  10.                note.title = (Math.random() > 0.5) ? "Cool title!" : "";    
  11.                viewNote(note);    
  12.            }    
  13.        },    
  14.        Action {    
  15.            iconId: "icon-m-toolbar-favorite-mark" //橫豎屏切換的按鈕處理  
  16.            onTriggered: {    
  17.                screenscreen.orientation = screen.orientation == Screen.Portrait ? Screen.Landscape : Screen.Portrait;    
  18.            }    
  19.        }    
  20.    ]    
  21.    Component {    
  22.         … … …//省略  
  23.    }    
  24.    Rectangle {    
  25.        color: "white"    
  26.        anchors.fill: parent    
  27.    }    
  28.    GridView {    
  29.        id: grid    
  30.        anchors.fill: parent    
  31.        model: meenotes    
  32.        cellWidth: 250    
  33.        cellHeight: 210    
  34.        delegate: noteDelegate    
  35.    }    
  36.    function viewNote(note) {    
  37.        window.nextPage(Qt.createComponent("Note.qml"));    
  38.        window.currentPage.note = note;    
  39.    }    

鑒于QML類似于web網頁css的編寫方式,效率已經很高了,但是似乎Qt Designer被我們忽視了,其實2.01版的Desinger已經可以使用meegotouch風格進行預覽了,效果如下圖:

效果圖
效果圖

目前Designer并不能直接生成QML文件,下一個版本的Desinger以及在計劃之中了,可以叫他Qt Quick Designer,在Qt Roadmap中已經可以體現出來了:

Qt Quick Designer

Qt Quick Designer

 

這便是用QML語言開發MeeGo應用程序的教程。

【編輯推薦】

  1. 在Windows系統上運行MeeGo SDK
  2. 在主流linux系統上運行MeeGo SDK
  3. MeeGo的進度報告:優等生還是差等生
  4. MeeGo 1.1手機版發布 諾基亞期待扭轉頹勢
  5. MeeGo移動應用程序開發入門
責任編輯:佚名 來源: 米趣網
相關推薦

2010-10-15 09:39:22

MeeGoQt

2010-05-02 14:35:47

Meego開發

2011-10-13 16:34:30

MeeGoQt插件

2014-01-07 10:12:15

Spark

2010-02-06 14:19:26

ibmdwGoogleMap

2011-05-03 09:14:45

QtOvi商店Symbian

2009-09-22 12:22:54

ibmdwLotus

2012-05-29 10:04:08

2012-03-15 15:35:51

iUI框架EclipseiOS Web

2013-02-21 14:14:40

開發Tizen

2013-02-21 14:15:41

開發Tizen

2012-02-08 15:06:31

ibmdw

2022-09-19 00:37:13

SaaS云計算開發

2011-04-01 11:01:02

應用程序BlackBerryJava

2012-03-20 09:20:40

Go語言

2010-05-12 14:12:44

Meego開發

2013-11-19 15:35:01

2011-02-22 10:23:43

2018-12-11 11:41:14

物聯網應用程序IOT

2011-12-06 10:10:59

云計算移動應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久免费樱桃 | 中文字幕一区二区三区日韩精品 | 国产日韩欧美一区 | 最近最新中文字幕 | 蜜桃综合在线 | 欧美高清视频一区 | 成人在线h | 91精品国产麻豆 | 成人在线视频观看 | 日韩欧美一级精品久久 | 国产日韩av一区二区 | 91资源在线观看 | 中文字幕在线剧情 | 亚洲精品视频一区 | 久久久久久www | 成人综合一区二区 | 羞羞网站在线免费观看 | 欧美精品在线一区二区三区 | 中文精品视频 | 国产精品国产a | 在线免费观看一区二区 | 欧美一区二区在线播放 | 色吊丝在线 | 亚洲欧美一区二区三区国产精品 | 91在线一区二区三区 | 国产中文字幕av | 精品在线看 | 国产成人在线视频免费观看 | 欧美在线a | 亚洲精品日韩精品 | 精品国产91亚洲一区二区三区www | 国产日产精品一区二区三区四区 | 久久久一区二区三区 | 一区二区三区四区在线视频 | 永久免费视频 | 免费观看成人鲁鲁鲁鲁鲁视频 | 亚洲一区二区国产 | 亚洲一区在线日韩在线深爱 | 欧美亚洲综合久久 | 欧美在线a| 天堂一区二区三区 |