新手必学 QML入门教程 (3)
创始人
2024-07-31 21:31:38
0

QMLQt推出的Qt Quick技术的一部分,是一种新增的简便易学的语言。QML是一种陈述性语言,用来描述一个程序的用户界面:无论是什么样子,以及它如何表现。

经过前面两个教程,文字也能显示,也能处理鼠标事件了,来点动画吧。

新手必学 QML入门教程 (3)

这个教程实现了当鼠标按住的时候,Hello,World从顶部到底部的一个旋转过程,并带有颜色渐变的效果。

完整的源代码main.qml

  1. import Qt 4.7  
  2.  Rectangle {  
  3.      id: page  
  4.      width: 500; height: 200  
  5.      color: "lightgray"  
  6.      Text {  
  7.          id: helloText  
  8.          text: "Hello World!"  
  9.          y: 30  
  10.          anchors.horizontalCenter: page.horizontalCenter  
  11.          font.pointSize: 24; font.bold: true  
  12.  
  13.          MouseArea { id: mouseArea; anchors.fill: parent }  
  14.          states: State {  
  15.              name: "down"; when: mouseArea.pressed == true  
  16.              PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" }  
  17.          }  
  18.          transitions: Transition {  
  19.              from: ""; to: "down"; reversible: true  
  20.              ParallelAnimation {  
  21.                  NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad }  
  22.                  ColorAnimation { duration: 500 }  
  23.              }  
  24.          }  
  25.      }  
  26.      Grid {  
  27.          id: colorPicker  
  28.          x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4  
  29.          rows: 2; columns: 3; spacing: 3  
  30.          Cell { cellColor: "red"; onClicked: helloText.color = cellColor }  
  31.          Cell { cellColor: "green"; onClicked: helloText.color = cellColor }  
  32.          Cell { cellColor: "blue"; onClicked: helloText.color = cellColor }  
  33.          Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor }  
  34.          Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor }  
  35.          Cell { cellColor: "black"; onClicked: helloText.color = cellColor }  
  36.      }  
  37.  } 

除了这个main.qml之外,还有一个Cell.qml也是需要的,和教程(2)中的完全一样。下面来看一看比起教程(2)的代码增加出来的内容。

  1. Text{  
  2.          ...  
  3.          states: State {  
  4.              name: "down"; when: mouseArea.pressed == true  
  5.              PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" }  
  6.          }  
  7.          transitions: Transition {  
  8.              from: ""; to: "down"; reversible: true  
  9.              ParallelAnimation {  
  10.                  NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad }  
  11.                  ColorAnimation { duration: 500 }  
  12.              }  
  13.          }  
  14.         ...  
  15.      } 

states内嵌于Text之中,可以为Text元素添加多个状态,现在的这个例子只增加了一个状态。该状态的名为为”down”,然后由“when”指 定了什么时候触发这个状态。PropertyChanges则指定了哪个元素的哪些属性会发生什么样的变化。例子中PropertyChanges利用 “target”指定了id为”helloText”的元素会发生变化,包括其y,rotation,color等属性。

transitions 是用于增加动画效果的(如果把transitions这一段代码删去,Hello,World的文字也会发生变化,但是看不到中间动画渐变效果)。同样可以看到transitions是复数形式,意味着可以添加多个动画过程。“from”和”to”指明了当前的动画作用于哪两个状态变化之间。 “from”和”to”的参数名来自于State中的”name”属性。

ParalleAnimation则指定了有多个 有多个动画并行发生。NumberAnimation用于qreal类型的属性变化,ColorAnimation则用于颜色变化。更多 Animation请在QML文档中查找”Animation and Transitions”。

小结:三篇关于QML教程到此结束。不管是文字显示,还是简单的动画效果,相信你可以和谐的去完成,希望本篇文章对你有所帮助。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...