乘机应变之Qml(2)

4 篇文章 0 订阅

Qt开发交流群:723516989~

学完Qt后,当你真正使用上了Qml,你会发现Qml的id使用干净利落,百样玲珑。
接下来我们走入Qml的代码大门。
我们开始创建⼀个空的main.qml⽂档。所有的QML⽂件都已.qml作为后缀。 作为⼀个标识语⾔(类似HTML)⼀个QML⽂档需要并且只有⼀个根元素。

import QtQuick 2.0 
Image {
 	id: root
 	source: "images/background.png" 
}

QML不会对根元素设置任何限制,我们使用一个background图像作为资源图像元素来作为我们的根元素。

注意代码里的id
id是这个特殊的属性是可选的,包含了一个标识符,在文档后面的地方可以直接饮用。
重要的是,一个id属性无法在它被设置后改变,并且在程序执行期间无法被设置。使用root作为根元素id仅仅是习惯,可以在比较大的QML文档中方便的引用最顶层元素。


为了把一个图片放在我们想放在布局的任意位置,我们使用了一个复杂的属性,称之为锚。
⽐如放置我在 另⼀个元素中间(anchors.centerIn:parent).有左边(left),右边 (right),顶部(top),底部(bottom),中央(centerIn),填充 (fill),垂直中央(verticalCenter)和⽔平中央(horizontalCenter)来表⽰ 元素之间的关系。确保他们能够匹配,锚定一个对象的左侧顶部的一个元素这样的做法是没有意义的。所以我们设置图片在父对象background的中央。

有时候你需要进行一些微小的调整。使用anchors.horizontalCenterOffsetanchors.verticalCenterOffset可以帮你实现这个功能。类似的调整属性也可以用于其他所有的锚。
还需要了解的可以查阅Qt的帮助文档知道完整的锚属性列表

例子

为了让我们的展⽰更加有趣⼀点,我们应该让程序有⼀些交互功能。当⽤户 点击场景上某个位置时,让我们的⻛⻋转动起来。

我们使用mouseArea元素,并且让它与我们的根元素大小一样。

Image 
	{ id: root 
	... 
	MouseArea 
	{ anchors.fill: parent 
	onClicked: wheel.rotation += 90 
	}
	... 
}

当⽤户点击覆盖区域时,⿏标区域会发出⼀个信号。你可以重写onClicked函 数来链接这个信号。在这个案例中引⽤了⻛⻋的图像并且让他旋转增加90 度。

注意:
对于每个工作的信号,命名方式都是on+SignalName的标题。当属性的值发生翻遍时也会发出一个信号。它们的命名方式是: on+PropertyName+Changed。如果一个宽度(width)属性改变了,你可以使用onWidthChanged:print(width)来得到这个监控这个新的宽度值。

现在⻛⻋将会旋转,但是还不够流畅。⻛⻋的旋转⾓度属性被直接改变了。 我们应该怎样让90度的旋转可以持续⼀段时间呢。现在是动画效果发挥作⽤的时候了。⼀个动画定义了⼀个属性的在⼀段时间内的变化过程。为了实现 这个效果,我们使⽤⼀个动画类型叫做属性⾏为。这个⾏为指定了⼀个动画 来定义属性的每⼀次改变并赋值给属性。每次属性改变,动画都会运⾏。这 是QML中声明动画的⼏种⽅式中的⼀种⽅式。

Image 
	{ id: root
	Image { 
		id: wheel 
		Behavior on rotation {
			 NumberAnimation {
			 	 duration: 250 
			 	 } 
			} 
	} 
}

现在每当⻛⻋旋转⾓度发⽣改变时都会使⽤NumberAnimation来实现250毫 秒的旋转动画效果。每⼀次90度的转变都需要花费250ms。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值