<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; xutaozero21</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/xutaozero21/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>用 QML 开发 MeeGo 应用程序</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/11/11/qml-meego/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/11/11/qml-meego/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 11:27:03 +0000</pubDate>
		<dc:creator>xutaozero21</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[开放源代码]]></category>
		<category><![CDATA[移动技术]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/11/11/qml-meego/</guid>
		<description><![CDATA[  什么是QML？ QML是一种描述应用程序UI的声明式语言，包括应用程序的外观（菜单、按钮、布局等）以及行为（点击事件）的描述。在QML中，UI界面被描述成一种树状的带属性对象的结构（类似于DOM） JavaScript是QML中使用的脚本语言, 所以你最好是对它有一定程度了解再深入进行QML的学习（可以参考JavaScript: The Definitive Guide)。如果对HTML和CSS等Web技术有所理解是会有帮助的，但不是必需的。 上面是官方介绍的前两段，具体中文教程可以看看Qt技术分享博客的系列教程，QML实际上是Qt Quick（Qt4.7.0中的新特性）核心组件之一：Qt Quick是一组旨在帮助开发者创建在移动电话，媒体播放器，机顶盒和其他便携设备上使用越来越多的直观、现代、流畅UI的工具集合。Qt Quick包括一组丰富的用户界面元素，一种用于描述用户界面的声明性语言（QML）及运行时，一组用于将这些高层次特性集成到经典的Qt应用程序的C++ API。 从官方的介绍可以看出，Qt Quick是为移动平台快速开发所量身打造的，先看一个实际例子：在MeeGo上运行的MeeNotes，除了业务逻辑，界面UI都是使用QML实现的。 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开发所不同之处 ： TEMPLATE = app TARGET = ../MeeNotes LIBS += -lQtComponents HEADERS += models/meenotesmodel.h \ models/notemodel.h SOURCES += main.cpp \ models/meenotesmodel.cpp \ models/notemodel.cpp QT += declarative 再看主入口main.cpp： [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"> </p>
<p style="text-align: left;">什么是QML？</p>
<p>QML是一种描述应用程序UI的声明式语言，包括应用程序的外观（菜单、按钮、布局等）以及行为（点击事件）的描述。在QML中，UI界面被描述成一种树状的带属性对象的结构（类似于DOM）</p>
<p>JavaScript是QML中使用的脚本语言, 所以你最好是对它有一定程度了解再深入进行QML的学习（可以参考JavaScript: The Definitive Guide)。如果对HTML和CSS等Web技术有所理解是会有帮助的，但不是必需的。</p>
<p>上面是官方介绍的前两段，具体中文教程可以看看Qt技术分享博客的系列教程，QML实际上是Qt Quick（Qt4.7.0中的新特性）核心组件之一：Qt Quick是一组旨在帮助开发者创建在移动电话，媒体播放器，机顶盒和其他便携设备上使用越来越多的直观、现代、流畅UI的工具集合。Qt Quick包括一组丰富的用户界面元素，一种用于描述用户界面的声明性语言（QML）及运行时，一组用于将这些高层次特性集成到经典的Qt应用程序的C++ API。</p>
<p style="text-align: left;">从官方的介绍可以看出，Qt Quick是为移动平台快速开发所量身打造的，先看一个实际例子：在MeeGo上运行的MeeNotes，除了业务逻辑，界面UI都是使用QML实现的。</p>
<p><img class="aligncenter" src="https://lh5.googleusercontent.com/MjsIJ3hE2ShXgMy7l8hAsxqTtXnNAtPjOUfuogxUpxdOGhtbh9MyFGwmHRI1DyFDdkN7TFdBvg7tmlhy8gntQHM7MSUw7_qzggWIVsCkG-6hmIGx1Q" alt="https://lh5.googleusercontent.com/MjsIJ3hE2ShXgMy7l8hAsxqTtXnNAtPjOUfuogxUpxdOGhtbh9MyFGwmHRI1DyFDdkN7TFdBvg7tmlhy8gntQHM7MSUw7_qzggWIVsCkG-6hmIGx1Q" width="462" height="372" /></p>
<p style="text-align: left;">Meenotes 运行效果</p>
<p><img class="aligncenter" src="https://lh4.googleusercontent.com/td4qP4XYL_g0CGEKHrxFhC7O7AdYPdqilTavmvm9Z4zddAXZngAPOxC9qlblD-6_9DgBdVvHDNE2AfPMh1Yo_o5EWCie4YWsMf5Lk4zJ_G4eWVtwvw" alt="https://lh4.googleusercontent.com/td4qP4XYL_g0CGEKHrxFhC7O7AdYPdqilTavmvm9Z4zddAXZngAPOxC9qlblD-6_9DgBdVvHDNE2AfPMh1Yo_o5EWCie4YWsMf5Lk4zJ_G4eWVtwvw" width="309" height="520" /></p>
<p style="text-align: left;">横竖屏幕切换（点击那个星号～）<br />
<img class="aligncenter" src="https://lh6.googleusercontent.com/TQ0IPh9Mm-UfRY12upue_JxXUMxXW5F0NRByS68wxmU1OrXaLNsW8RPWTLScKi4y7qSQZWS5qp5XGcXsV5UG-fwRJRW0vWGq3o984iIeI6jpmXHfPA" alt="https://lh6.googleusercontent.com/TQ0IPh9Mm-UfRY12upue_JxXUMxXW5F0NRByS68wxmU1OrXaLNsW8RPWTLScKi4y7qSQZWS5qp5XGcXsV5UG-fwRJRW0vWGq3o984iIeI6jpmXHfPA" width="415" height="243" /></p>
<p>在模拟器中运行效果</p>
<p>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，进行编译安装。</p>
<p>简单看看MeeNotes下的实际代码</p>
<p>src目录下的src.pro，红色部分即是与使用libmeegotouch开发所不同之处 ：</p>
<p>TEMPLATE = app<br />
TARGET = ../MeeNotes<br />
LIBS += -lQtComponents<br />
HEADERS += models/meenotesmodel.h \<br />
models/notemodel.h<br />
SOURCES += main.cpp \<br />
models/meenotesmodel.cpp \<br />
models/notemodel.cpp<br />
QT += declarative</p>
<p>再看主入口main.cpp：</p>
<p>#include "models/meenotesmodel.h"<br />
#include<br />
#include<br />
#include<br />
#include<br />
#include<br />
int main(int argc, char **argv)<br />
{<br />
QApplication app(argc, argv);<br />
app.setApplicationName("MeeNotes");</p>
<p>//MeeNotesModel 是Model类</p>
<p>qmlRegisterType();<br />
MeeNotesModel model;<br />
model.setSource("notes/");</p>
<p>//在哪查找main.qml</p>
<p>#ifndef MEENOTES_RESOURCE_DIR<br />
const QDir dir(QApplication::applicationDirPath());<br />
const QUrl qmlPath(dir.absoluteFilePath("resource/default/main.qml"));<br />
#else<br />
const QDir dir(MEENOTES_RESOURCE_DIR);<br />
const QUrl qmlPath(dir.absoluteFilePath("main.qml"));<br />
#endif<br />
//创建能够解释qml运行的window</p>
<p>QDeclarativeWindow window(qmlPath);<br />
window.rootContext()-&gt;setContextProperty("meenotes", &amp;model);<br />
window.window()-&gt;show();<br />
return app.exec();<br />
}</p>
<p>查看main.qml：<br />
import Qt 4.7<br />
import com.meego 1.0<br />
Window {<br />
id: window<br />
Component.onCompleted: {<br />
window.nextPage(Qt.createComponent("NoteList.qml"))<br />
}<br />
}</p>
<p>查看NoteList.qml：<br />
import Qt 4.7<br />
import com.meego 1.0<br />
Page {<br />
title: "MeeNotes"<br />
actions: [<br />
Action {<br />
iconId: "icon-m-toolbar-add" //新建note按钮的处理<br />
onTriggered: {<br />
var note = meenotes.newNote();<br />
note.title = (Math.random() &gt; 0.5) ? "Cool title!" : "";<br />
viewNote(note);<br />
}<br />
},<br />
Action {<br />
iconId: "icon-m-toolbar-favorite-mark" //横竖屏切换的按钮处理<br />
onTriggered: {<br />
screen.orientation = screen.orientation == Screen.Portrait ? Screen.Landscape : Screen.Portrait;<br />
}<br />
}<br />
]<br />
Component {<br />
… … …//省略</p>
<p>}<br />
Rectangle {<br />
color: "white"<br />
anchors.fill: parent<br />
}<br />
GridView {<br />
id: grid<br />
anchors.fill: parent<br />
model: meenotes<br />
cellWidth: 250<br />
cellHeight: 210<br />
delegate: noteDelegate<br />
}<br />
function viewNote(note) {<br />
window.nextPage(Qt.createComponent("Note.qml"));<br />
window.currentPage.note = note;<br />
}<br />
}</p>
<p style="text-align: left;">鉴于QML类似于web网页css的编写方式，效率已经很高了，但是似乎Qt Designer被我们忽视了，其实2.01版的Desinger已经可以使用meegotouch风格进行预览了，效果如下图： </p>
<p style="text-align: center;"><img class="aligncenter" src="https://lh6.googleusercontent.com/5z7ZjbX8IQpupTJZFj3WOQikTjaD8fp_xPNP68w5R-3cipwLzvpTxbTeE2IQvQJhe1L3DgFurWJ0iExmDrYCXKm3bRYKOnmao8cNlEr7xxDzSid8Jw" alt="https://lh6.googleusercontent.com/5z7ZjbX8IQpupTJZFj3WOQikTjaD8fp_xPNP68w5R-3cipwLzvpTxbTeE2IQvQJhe1L3DgFurWJ0iExmDrYCXKm3bRYKOnmao8cNlEr7xxDzSid8Jw" width="424" height="235" /></p>
<p>目前Designer并不能直接生成QML文件，下一个版本的Desinger以及在计划之中了，可以叫他Qt Quick Designer，在Qt Roadmap中已经可以体现出来了：</p>
<p style="text-align: left;"> </p>
<p style="text-align: center;"><img class="aligncenter" src="https://lh4.googleusercontent.com/nYL_bzp-N-RIFKleE9-g0pbghYo9xj2PvOmpgzdr8pyoSKMrQ2e4iXpOTyCgtfK3PAx34SdsIq5wuEF2EYey3a7F-Yy-J5lE1vfo4M8JeMIrYJdP_g" alt="https://lh4.googleusercontent.com/nYL_bzp-N-RIFKleE9-g0pbghYo9xj2PvOmpgzdr8pyoSKMrQ2e4iXpOTyCgtfK3PAx34SdsIq5wuEF2EYey3a7F-Yy-J5lE1vfo4M8JeMIrYJdP_g" width="459" height="327" /></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/11/11/qml-meego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

