QML入门教程.doc_第1页
QML入门教程.doc_第2页
QML入门教程.doc_第3页
QML入门教程.doc_第4页
QML入门教程.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

QML学习【一】Basic Types博客分类: QtQML教程QML入门教程(1)QML是什么?QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制。它结合了QtDesigner UI和QtScript的优点。QtDesigner可以设计出.ui界面文件,但是不支持和Qt原生C+代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺点,如果要在脚本中创建一个继承于QObject的图形对象非常不方便,只能在Qt代码中创建图形对象,然后从QtScript中进行访问。而QML可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C+代码进行方便的交互,使用起来非常方便。如何使用?在Qt C文件中通过QDeclarativeView加载,就像使用UiLoader加载.ui文件一样。不过本文不会去介绍如何在Qt C中使用QML,而是把重点放在QML的语法上,不过别担心看不到.qml文件的效果。Qt提供了一个工具QML Viewer可以查看.qml文件生成的效果,该程序在Qt的bin目录下,应用名字叫qml(Windows下叫qml.exe)。所以你在看到别人提供的.qml文件时,你可以用下面命令qml filename.qml查看.qml的执行结果,咱们的第一个Hello,World生成界面如下开始QML吧上面的Hello,World源代码如下Js代码1. importQtQuick1.02. 3. Rectangle4. id:page5. width:500;height:2006. color:lightgray7. 8. Text9. id:helloText10. text:Helloworld!11. y:3012. anchors.horizontalCenter:page.horizontalCenter13. font.pointSize:24;font.bold:true14. 15. 第1行是Qt QML的统一用法,指明当前QML会使用Qt-4.7里已经定义好的类型,比如第3行的Rectangle和第8行的Text。第3行开始至文章结束处则定义了一个矩形的图形区域对象,第4行则申明了该矩形区域对象的id为”page”可以被其它对象识别并通过该id访问其成员属性,另外几个属性width/height/color则很好理解,语法跟CSS类似,可以写在一行中用分号”;”隔开。第8行至第12行则是一个文本对象,看它代码的嵌套结构可以知道它是内嵌于Rectangle的。Text的属性除了anchors其它几个都能顾名思义。anchors描诉的是当前对象的位置和其它对象的相对关系,这里看到其水平中心位置在“page“的水平中心位置。如果想对anchors了解更多,请参考锚的解释。以上就是Hello,World的全部代码,将其存为hellowordl.qml,那么只要执行qml hellowrold.qml就能看到文章前头的界面了。更多对象?在上面的代码中我们用到了Rectangle和Text,那么我还有哪些对象以及这些对象有哪些属性呢。那么请访问QML-Item类,Item类是QML最基础的类,通过查看它的继承类以及这些继承类可用的属性,你可以添加更多你感兴趣的内容。QML入门教程(2)在上一篇文章里我们使用了最基础的QML类型实现了文字Hello,World的显示。这篇文章中将会增加颜色选项面板,用户可以给Hello,World设置不同的颜色,如下图显示QML组件从图中可以看到选项面板由6个颜色小块组成,它们唯一的区别就是颜色不一样。那么我们就可以用组件(Component)来实现一个颜色块,然后在需要的时候使用这个组件就可以了。组件其实和其它编程语言中的宏,函数,类,结构体等功能差不多,就是代码复用。作为程序员,我知道你懂的。组件由一个单独的QML文件名组成,文件名总是以大写字母开头,要使用该组件的时候直接使用该文件名就可以了。关于如何定义自己的组件,请访问Defining new Components。我们为一个颜色块定义了一个Cell.qml文件,然后使用Cell作为一个去访问它。Cell.qml的内容Js代码1. importQtQuick1.02. 3. Item4. id:container5. propertyaliascellColor:rectangle.color6. signalclicked(colorcellColor)7. 8. width:40;height:259. 10. Rectangle11. id:rectangle12. border.color:white13. anchors.fill:parent14. 15. 16. MouseArea17. anchors.fill:parent18. onClicked:container.clicked(container.cellColor)19. 20. 挨个看代码Js代码1. Item2. id:container3. propertyaliascellColor:rectangle.color4. signalclicked(colorcellColor)5. 6. width:40;height:25Item是最常使用的QML类型,一般用作其它类型的容器,可以理解成最顶级的父类,功能类似于QtGui中的QWidget。用一个属性别名访问其内嵌对象rectangle的color属性。在其它文件中可以用Cell对象的cellColor获得rectangle的color值。signal clicked(color cellColor)则为对象定义了一个信号,在代码的其它部分可以发出这个信号。Js代码1. Rectangle2. id:rectangle3. border.color:white4. anchors.fill:parent5. 这一部分没有特别好说的,在Item中内嵌了一个id为rectangle白边框的矩形区域,大小占满整个Item。Js代码1. MouseArea2. anchors.fill:parent3. onClicked:container.clicked(container.cellColor)4. MouseArea则为Item增加了一块鼠标响应区,看它的anchors知道,在整个Item区域内都是鼠标活动区,都能侦听到鼠标事件。onClicked那一行则相当于为鼠标单击事件增加了一个处理行为,这里是发出了一个clicked()的信号。这个信号正是我们在Item里定义的那个signal。Cell.qml写完了,再来看看程序的主文件。main.qml的内容Js代码1. importQtQuick1.02. 3. Rectangle4. id:page5. width:500;height:2006. color:lightgray7. 8. Text9. id:helloText10. text:Helloworld!11. y:3012. anchors.horizontalCenter:page.horizontalCenter13. font.pointSize:24;font.bold:true14. 15. 16. Grid17. id:colorPicker18. x:4;anchors.bottom:page.bottom;anchors.bottomMargin:419. rows:2;columns:3;spacing:320. 21. CellcellColor:red;onClicked:helloText.color=cellColor22. CellcellColor:green;onClicked:helloText.color=cellColor23. CellcellColor:blue;onClicked:helloText.color=cellColor24. CellcellColor:yellow;onClicked:helloText.color=cellColor25. CellcellColor:steelblue;onClicked:helloText.color=cellColor26. CellcellColor:black;onClicked:helloText.color=cellColor27. 28. 这里在原来的基础上增加了一个Grid网格。x坐标是4,底部挨着page的底部,所以我们看到的是在左下角。新增的6个Cell,名字和Cell.qml是一样的。通过cellColor属性将颜色传给了每个颜色块。当Cell接收到onClicked事件的时候,关联的代码回去修改Hello,World上的颜色。细心的朋友可能会注意到Cell只是定义了clicked()的信号,并没有定义onClicked()啊,是的这就是Component的语法规则了。如果你在Cell.qml里定义的是clicked(),那么你在main.qml中引用的时候就该用onClicked()了。QML入门教程(3)经过前面两个教程,文字也能显示,也能处理鼠标事件了,来点动画吧.这个教程实现了当鼠标按住的时候,Hello,World从顶部到底部的一个旋转过程,并带有颜色渐变的效果。完整的源代码main.qml import QtQuick 1.0Js代码1. Rectangle2. id:page3. width:500;height:2004. color:lightgray5. 6. Text7. id:helloText8. text:Helloworld!9. y:3010. anchors.horizontalCenter:page.horizontalCenter11. font.pointSize:24;font.bold:true12. 13. MouseAreaid:mouseArea;anchors.fill:parent14. 15. states:State16. name:down;when:mouseArea.pressed=true17. PropertyChangestarget:helloText;y:160;rotation:180;color:red18. 19. 20. transitions:Transition21. from:;to:down;reversible:true22. ParallelAnimation23. NumberAnimationproperties:y,rotation;duration:500;easing.type:Easing.InOutQuad24. ColorAnimationduration:50025. 26. 27. 28. 29. Grid30. id:colorPicker31. x:4;anchors.bottom:page.bottom;anchors.bottomMargin:432. rows:2;columns:3;spacing:333. 34. CellcellColor:red;onClicked:helloText.color=cellColor35. CellcellColor:green;onClicked:helloText.color=cellColor36. CellcellColor:blue;onClicked:helloText.color=cellColor37. CellcellColor:yellow;onClicked:helloText.color=cellColor38. CellcellColor:steelblue;onClicked:helloText.color=cellColor39. CellcellColor:black;onClicked:helloText.color=cellColor40. 41. 除了这个main.qml之外,还有一个Cell.qml也是需要的,和教程(2)中的完全一样。下面来看一看比起教程(2)的代码增加出来的内容。Js代码1. Text2. .3. states:State4. name:down;when:mouseArea.pressed=true5. PropertyChangestarget:helloText;y:160;rotation:180;color:red6. 7. 8. transitions:Transition9. from:;to:down;reversible:true10. ParallelAnimation11. NumberAnimationproperties:y,rotation;duration:500;easing.type:Easing.InOutQuad12. ColorAnimationduration:50013. 14. 15. .tates内嵌于Text之中,可以为Text元素添加多个状态,现在的这个例子只增加了一个状态。该状态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论