从头学Qt Quick(2)-- QML语法从一个简单的例子说起
在上一篇文章中,我们对QtQuick做了简单的介绍,体验了使用QML语言构建一个UI的便捷。这里我们简要介绍一下QML的语法。
QML将界面分成一些更小的元素,这些元素可以组成一个组件,QML语言描述了UI的形状和行为,并且可以使用JavaScript修饰。总的来说QML的结构有点像HTML,其语法和CSS比较近似。
1.QML层次结构
要使用QML进行界面的布局,首先需要理解QML元素的层次结构。QML的层次结构很简单,是一个树形结构,最外层必须有一个根元素,根元素里面可以嵌套一个或多个子元素,子元素里面还可以包含子元素。如果用图形画出来的话大概是这个样子。
QML的坐标系采用的屏幕坐标系,原点在屏幕左上角,x轴从左向右增大,y轴从商到下增大,z轴从屏幕向外增大。子元素从父元素上继承了坐标系统,它的x,y总是相对于它的父元素坐标系。这一点一定要记住,非常重要。
2.基本语法
我们主要对照下面的代码进行介绍:
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.2 /* 这是一个多行注释,和c语言的一样 */
// 当然这是一个单行注释 Window { id:root; // Window元素的id,应该保证在这个qml文件中名字唯一
visible: true;
width:; // 直接指定窗口的宽度
height:; // 直接指定窗口的高度 Image {
id: bg;
width: parent.width; // 图片的宽度依赖父窗口的宽度
height: parent.height; // 图片的高度依赖父窗口的高度
source: "qrc:///images/sky.jpg" // 引用一张图片
} Image {
id: rocket;
x: (parent.width - width) / 2; // 图片位置水平居中
y:; // 图片位置距离父窗口40
source: "qrc:///images/rocket.png";
} Text {
// 没有指定id,即这是一个匿名元素
y:rocket.y + rocket.height + 20; // 文本顶部距离rocket图片底部20
anchors.horizontalCenter: parent.horizontalCenter // 设置文字水平居中
text: qsTr("火箭发射!"); // 设置文本显示的文字
color: "#ff2332"; // 设置文本颜色
font.family: "楷体"; // 设置字体为楷体
font.pixelSize:; // 设置文字大小
}
}
运行效果是这个样子。
布局结构是是这样的:
代码说明:
(1)第1~3行的import是引入了一个指定版本的模块。一般都会引入QtQuick2.x这个模块,Window模块代表一个窗体,Control模块有很多的控制组件。这种import语法类似于C语言中的#include,和Java语言中的imort效果基本上一致。
(2)第5、6两行分别是多行注释和单行注释,和C语言中的规则是一样的。
(3)每一个QML文件都需要一个根元素,这里的根元素是Window元素,元素的形式是:元素类型 {}
(4)元素拥有属性,他们按照name:value的格式进行组织;
(5)语句后面的分号";"是可选的,但是建议加上;
(6)第7行指定了window的id,在一个qml文件这种id硬保证唯一,否则后出现的id会覆盖前面的id造成不必要的bug。建议根元素的名字直接叫“root”,方便查找和理解,当然也可以取名任何你喜欢的名字。任何QML文档中的元素都可以使用他们的id进行访问;
(7)第11行设置窗口可见,默认是false;
(8)第12、13行指定了窗口的宽高为460x288;
(9)第15行使用了一个Image元素,这个元素是用来展示图片的;
(10)第17、18行指定图片的高度和宽度为父元素(即WIndow)的宽高,因此图片的宽高会随着父元素变化,使用parent可以访问父元素。
(11)19行指定了一个图片资源的路径,这里使用了“qrc://”资源,这个资源的路径在进行配置;qml还支持直接的本地文件路径和网络路径。
(12)第24、25行指定了第二张图片的位置,在窗口水平居中,距离窗口顶部40像素;
(13)第29行创建了一个Text元素,这个元素是用来呈现文字的。
(14)第31行指定文本元素的y坐标为距离火箭图片(rock)底部20个像素;
(15)第32行使用锚点的方式设置了文字的水平居中;
(16)第33行设置了文本内容;
(17)第34行设置文字的颜色,文字的颜色可以使用RGB方式也可以使用W3C规范的SVG方式;
(18)第35、36行设置了字体和文字的大小。
3.qmlscene 工具
qt提供了一个查看qml效果的工具qmlscene ,这个工具在$QTDIR/qmlscene.exe,设置好环境变量后就可以直接在cmd矿口里面使用qmlscene 查看qml文件效果。
在控制台下输入qmlscene后就会弹出一个文件选择窗口,选择需要预览的qml,当然这里我们图片设置的是qrc路径,qmlscene预览效果并不好
可以看到,两张图片并没有显示出来,并且会提示找不到这两张图片。
解决办法当然可以将qrc路径修改成本地文件路径
当然qmlscene也可以直接在后面接qml的位置比如上面图中就使用了
qmlscene D:/Workspace/qt/rocket/main.qml
在下一篇随笔中将详细介绍QML语法中的属性,和在QML使用JS脚本的方式。
代码下载:http://download.csdn.net/detail/csulennon/8673425
从头学Qt Quick(2)-- QML语法从一个简单的例子说起的更多相关文章
- 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
先看一下效果图: 实现功能:点击不同的色块可以改变文字的颜色. 实现步骤: 一.创建一个默认的Qt Quick工程: 二.添加文件Cell.qml 这一步主要是为了实现一个自定义的组件,这个组件就是我 ...
- 从头学Qt Quick(1) --体验快速构建动态效果界面
自2005年Qt4发布以来,Qt已经为成千上万的应用程序提供了框架服务,现在Qt已经基本上支持所有的开发平台了,这里面既包含了桌面.嵌入式领域,也包括了Android.IOS.WP等移动操作平台,甚至 ...
- 从头学Qt Quick系列
http://www.cnblogs.com/csulennon/category/686605.html
- Qt Quick 与 QML语言(初学笔记1)
Qt Quick Qt Quick是一些新的UI技术的集合,用来帮助开发者创建一种现在越来越多用于手机.多媒体播放器.机顶盒以及其他便携式设备上的直观的.现代的.流畅的用户界面.简单来说,Qt Qui ...
- Qt Quick 和qml介绍
很多人不了解Qt Quick和Qml,还有很多人对其存在偏见.这篇文章就是来向这些有困惑的人介绍一下其是什么,有什么特点. 首先,这两个是一个东西吗? 答案:是的.但是,具体来说,Qt Quick是框 ...
- qt quick中qml编程语言
Qt QML 入门 — 使用C++定义QML类型 发表于 2013 年 3 月 11 日 注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如 ...
- 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解
Qt Quick 之 QML 与 C++ 混合编程详解 - CSDN博客 专栏:Qt Quick简明教程 - CSDN博客 .
- 用Qt写软件系列三:一个简单的系统工具(上)
导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...
- Qt Quick 之 QML 与 C++ 混合编程具体解释
Qt Quick 技术的引入.使得你能够高速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的.也有非常多局限性,原来 Qt 的一些技术,比方低阶的网络编程如 QTcpSocke ...
随机推荐
- paip.文件读写api php java python总结.txt
paip.文件读写api php java python总结.txt 一.多种方式读文件内容. 1.按字节读取文件内容 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. ...
- paip.log4j 日志系统 参数以及最佳实践
paip.log4j 日志系统 参数以及最佳实践 %d{yyyy-MM-dd HH:mm:ss} [thrd:%t] %5p loger:%c (%C.%M.%L) - %m%n 201 ...
- .NET Remoting学习笔记(一)概念
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 背景 自接触编程以来,一直听过这个名词Remotin ...
- iOS---性能优化
最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧.小结如下. Instruments使用技巧 关于Instruments官方有一个很有 ...
- PLSQL查询表是否被锁定(转)
PLSQL查询表是否被锁定(转) http://blog.sina.com.cn/s/blog_70717ff00100qb85.html (2011-05-08 13:13:06) 转载▼ 标签: ...
- gulp学习笔记3
gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1.编译sass Sass 是一种 CSS 的开发工具,提供了许多便利的写法,大 ...
- phpweb成品网站最新版(注入、上传、写shell)
注入:之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码 鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件鸡肋2: 有一定安全常识的站长都会删掉 install 目 ...
- EnumHelper枚举常用操作类
在项目中需要把枚举填充到下拉框中,所以使用统一的方法实现,测试代码如下: namespace CutPictureTest.Comm { public class EnumHelper { publi ...
- 《Xenogears》(异度装甲)隐含的原型与密码
<Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...
- 小白学数据分析----->ARPPU的误区
新年到来,该应该持续坚持写下去,还是有很多人要来学习和进步的. 今天提到了一个概念:ARPPU. 这个概念等同于之前大家认识的ARPU(其实这句话我是很不愿意说的),ARPPU是总收入除以总付费用户数 ...