在QML中,一个用户界面被指定为具有属性的对象树,这使得Qt更加便于很少或没有编程经验的人使用,JavaScript在QML中作为一种脚本语言,对QML进行逻辑方面的编程。

AD:WOT2015 互联网运维与开发者大会 热销抢票

QMLQt推出的Qt Quick技术的一部分,是一种新增的简便易学的语言。QML是一种陈述性语言,用来描述一个程序的用户界面:无论是什么样子,以及它如何表现。在QML,一个用户界面被指定为具有属性的对象树。 这使得Qt更加便于很少或没有编程经验的人使用。 JavaScript在QML中作为一种脚本语言,对QML进行逻辑方面的编程.。

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

QML组件

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

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

Cell.qml的内容:

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

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

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

  1. Rectangle {id: rectangle
  2. border.color: “white”
  3. 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.7Rectangle {
  2. id: page     width: 500; height: 200     color: "lightgray"     Text {
  3. id: helloText
  4. text: "Hello world!"
  5. y: 30
  6. anchors.horizontalCenter: page.horizontalCenter
  7. font.pointSize: 24;
  8. font.bold: true
  9. }
  10. Grid {
  11. id: colorPicker  x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4
  12. rows: 2; columns: 3; spacing: 3
  13. Cell {
  14. cellColor: "red";
  15. onClicked: helloText.color = cellColor
  16. }
  17. Cell {
  18. cellColor: "green";
  19. onClicked: helloText.color = cellColor
  20. }
  21. Cell {
  22. cellColor: "blue";
  23. onClicked: helloText.color = cellColor
  24. }
  25. Cell {
  26. cellColor: "yellow"; onClicked: helloText.color = cellColor
  27. }
  28. Cell {
  29. cellColor: "steelblue";
  30. onClicked: helloText.color = cellColor
  31. }
  32. Cell {
  33. cellColor: "black";
  34. onClicked: helloText.color = cellColor }
  35. }
  36. }

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

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

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

小结:QMLQt推出的Qt Quick技术的一部分,是一种新增的简便易学的语言。本文的代码也不少了,随便改动改动,你会了解更多QML的秘密的本文借到这!嘿嘿,如有疑问,敬请留言。

初识QML学习机制的更多相关文章

  1. 交换机的交换原理、mac学习机制和老化机制

    1.交换机的交换原理: 1.交换机在mac地址表中查找数据帧中的目标mac地址,如果找到就讲该数据帧发送到相应的端口,如果找不到就广播. 2.如果交换机收到的报文中的源mac地址和目标mac地址一致的 ...

  2. QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素

    QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参 ...

  3. qml学习:对象和属性

    qml学习:对象和属性 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考文档<<Qt及Qt Quick开发实战精解.pdf>> ...

  4. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  5. QML学习笔记(六)- 简单计时器和定时器

    做一个简单的qml计时器和定时器,左键触发计时,右键触发定时 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(六)- 简单计时器和定时器 左键点击按钮,触发计时器,中键可以暂停计时,同 ...

  6. QML学习笔记(五)— 做一个简单的待做事项列表

    做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...

  7. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...

  8. Python 入门【一】Python 初识及学习资料

    Python 初识及学习路线: CodeCademy Python 在线教学: 廖雪峰 Python 2.7 教程: 廖雪峰 Python 3.0 教程: Python 官方文档(2.7~3.7:英文 ...

  9. QML学习笔记之一

    摘自<Qt Quick中文手册> Qt Quick提供了一套高动态,丰富的QML元素来定制用户界面的说明性框架. Qt Quick包含了QtDeclarative C++模块.QML,并且 ...

随机推荐

  1. LIB文件和DLL文件的作用

    (1)lib是编译时需要的,dll是运行时需要的.如果要完成源代码的编译,有lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有.(2)一般的动态库程序有lib ...

  2. NS2仿真:使用NS仿真软件模拟简单网络模型

    NS2仿真实验报告1 实验名称:使用NS仿真软件模拟简单网络模型 实验日期:2015年3月2日~2015年3月7日 实验报告日期:2015年3月8日 一.实验环境(网络平台,操作系统,网络拓扑图) 运 ...

  3. (一)《Java编程思想》学习——按位运算符、移位运算符

    (第三章) (一)按位运算符 按位逻辑运算符有: “与”(AND)        & 1&1=1;1&0=0;0&0=0 “或”(OR) | 1|1=1;1|0=1;0 ...

  4. compass的使用

    compass常用的一些命令 compass create 创建新Compass项目 compass init  为已存在项目添加compass compass clean 移动已生成的文件和缓存 c ...

  5. 【socket.io研究】2.小试牛刀

    1.建立个项目,也就是文件夹,这里使用testsocket 2.创建文件package.json,用于描述项目: { "name":"testsocket", ...

  6. Swift--集合类型 数组 字典 集合

    数组 1.创建一个数组 var someInts = [Int]()空数组 someInts = []清空 var threeDoubles = Array(repeating: 0.0, count ...

  7. [GIT] warning: LF will be replaced by CRLF问题解决方法

    原文链接[http://michael-roshen.iteye.com/blog/1328142] 开发环境: 操作系统: windows xp ruby 1.9.2 rails 3.1.3 git ...

  8. js中的逻辑或和逻辑与

    a=''||'abc';                              //返回什么?  'abc' a=1||2;                                  // ...

  9. 关于升级到win10后的网络问题

    最近我的alienware电脑从win7升级到win10,看到很多网友都有一个问题,那就是网络受限了, 基本看了很多百度到的,方法基本都不是很有用,我看到了一个网友的办法完美解决了我机器上的网络问题, ...

  10. 分割gbk中文出现乱码的问题解决

    近日遇到一个神奇的字“弢(tao)”. 具体的过程是这样的: $list = explode('|', 'abc弢|bc'); var_dump($list); 取得这个分割的结果. 和想象不同,结果 ...