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

继续介绍QML入门教程。QML是一种描诉性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制。

上一篇文章里我们使用了最基础的QML类型实现了文字Hello,World的显示。这篇文章中将会增加颜色选项面板,用户可以给Hello,World设置不同的颜色,如下图显示 :

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

QML组件

从图中可以看到选项面板由6个颜色小块组成,它们唯一的区别就是颜色不一样。那么我们就可以用组件(Component)来实现一个颜色块,然后在需要的时候使用这个组件就可以了。组件其实和其它编程语言中的宏,函数,类,结构体等功能差不多,就是代码复用。作为程序员,我知道你懂的。

组件由一个单独的QML文件名组成,文件名总是以大写字母开头,要使用该组件的时候直接使用该文件名就可以了。关于如何定义自己的组件,请访问Defining new Components。我们为一个颜色块定义了一个Cell.qml文件,然后使用Cell作为一个去访问它。

Cell.qml的内容

  1. import Qt 4.7  
  2. Item {  
  3.     id: container  
  4.     property alias cellColor: rectangle.color  
  5.     signal clicked(color cellColor)  
  6.     width: 40; height: 25  
  7.     Rectangle {  
  8.         id: rectangle  
  9.         border.color: "white"  
  10.         anchors.fill: parent  
  11.     }  
  12.     MouseArea {  
  13.         anchors.fill: parent  
  14.         onClicked: container.clicked(container.cellColor)  
  15.     }  

挨个看代码~

  1. Item {  
  2. id: container  
  3. property alias cellColor: rectangle.color  
  4. signal clicked(color cellColor)  
  5. width: 40; height: 25 

Item是最常使用的QML类型,一般用作其它类型的容器,可以理解成最顶级的父类,功能类似于QtGui中的QWidget。用一个属性别名访问其内嵌对象rectangle的color属性。在其它文件中可以用Cell对象的cellColor获得rectangle的color值。

signal clicked(color cellColor)则为对象定义了一个信号,在代码的其它部分可以发出这个信号。

  1. Rectangle {  
  2. id: rectangle  
  3. border.color: “white”  
  4. anchors.fill: parent  

这一部分没有特别好说的,在Item中内嵌了一个id为rectangle白边框的矩形区域,大小占满整个Item。

  1. MouseArea {  
  2. anchors.fill: parent  
  3. onClicked: container.clicked(container.cellColor)  

MouseArea则为Item增加了一块鼠标响应区,看它的anchors知道,在整个Item区域内都是鼠标活动区,都能侦听到鼠标事件。onClicked那一行则相当于为鼠标单击事件增加了一个处理行为,这里是发出了一个clicked()的信号。这个信号正是我们在Item里定义的那个signal。

Cell.qml写完了,再来看看程序的主文件。

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.     Grid {  
  14.          id: colorPicker  
  15.          x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4  
  16.          rows: 2; columns: 3; spacing: 3  
  17.          Cell { cellColor: "red"; onClicked: helloText.color = cellColor }  
  18.          Cell { cellColor: "green"; onClicked: helloText.color = cellColor }  
  19.          Cell { cellColor: "blue"; onClicked: helloText.color = cellColor }  
  20.          Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor }  
  21.          Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor }  
  22.          Cell { cellColor: "black"; onClicked: helloText.color = cellColor }  
  23.      }  
  24.  } 

这里在原来的基础上增加了一个Grid网格。x坐标是4,底部挨着page的底部,所以我们看到的是在左下角。

新增的6个Cell,名字和Cell.qml是一样的。通过cellColor属性将颜色传给了每个颜色块。

当Cell接收到onClicked事件的时候,关联的代码回去修改Hello,World上的颜色。细心的朋友可能会注意到Cell只是定义了clicked()的信号,并没有定义onClicked()啊,是的这就是Component的语法规则了。如果你在Cell.qml里定义的是plicked(),那么你在main.qml中引用的时候就该用onPlicked()了。

好了,代码也不少了,随便改动改动,你会了解更多QML的秘密的。

小结:QML入门教程,已经介绍两篇了,不知道你了解的怎么样了,如果还想继续深入的话,那么就看下一篇关于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 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...