-
Qt.binding()的作用,动态创建新的绑定,就是向Qt.binding()传递一个函数来返回需要的结果。
import QtQuick 2.0
Item {
width: 600
height: 600
Rectangle{
width: 10;height: width * 2
color: "red";anchors.centerIn: parent;focus: true
Keys.onSpacePressed:
/*使用Qt.binding()来绑定height和width的关系,
* 这样只要width变化,就是触发height变化
*/
height = Qt.binding(function(){return width*3})
MouseArea{
anchors.fill: parent
onClicked: parent.width += 10
}
}
}
-
在属性绑定中可以使用this,在其他情况下this的值都是未定义的。
-
connect()函数在什么时候使用?
一般的,发射信号的QML对象类型会提供一个默认的信号处理器。但是,有时需要从一个对象发射一个信号来触发另一个对象中定义的函数,这时就需要使用connect()
函数。
-
关键属性信号处理器
Component.onCompleted
:每一个QML对象都包含一个附加的Component
属性,它可以引用对象被实例化的组件。每一个Component
都会发射一个onCompleted
信号,其对应的onCompleted()
处理器会在QML环境完全建立以后执行。在onCompleted()
中的脚本代码就可以实现在启动时运行,一些初始化的操作都可以放在这里进行。 -
一个QML文档包含两部分:import导入语句和一个单一的根对象声明构成的对象树。需要强调的时,一个QML文档只能包含一个根对象声明,不允许出现两个平行的根对象。比如下面的代码肯定是错误的:
import QtQuick 2.0 Item { width: 600 height: 600 } Rectangle{ function startupFunction(){ //...startup code } Component.onCompleted: startupFunction(); }
-
QML文件名必须以大写字母开头,如:Abc.qml
-
.qml文件中的根对象定义了可用于该QML类型的一些特性。所有属于该根对象的属性,信号和方法,无论是自定义声明,还是来自QML类型,都可以在外部进行访问,并且可以被该类型的对象进行读取和修改。例如,在SquareButton.qml中的Rectangle使用如下代码进行定义:
//SquareButton.qml import QtQuick 2.0 Rectangle{ id: root property bool pressed: mouseArea.pressed signal buttonClicked(real xPox, real yPos) function randomizeColor(){ root.color = Qt.rgba(Math.random(), Math.random(), Math.random(), 1) } width: 100;height: 100 color: "red" MouseArea{ id:mouseArea anchors.fill: parent onClicked: root.buttonClicked(mouse.x, mouse.y) } }
所有的
SquareButton
对象都可以使用这里定义的pressed
属性、buttonClicked
信号和randomizeColor()
方法。例如://application.qml import QtQuick 2.0 SquareButton{ id:squareButton onButtonClicked:{ console.log("Clicked", xPos, yPos) } }
需要注意的时,在SquareButton.qml中定义的任何一个id值都不能在
SquareButton
对象中进行访问。因为id值只能在组件作用域进行访问。另外,SquareButton
对象也无法通过mouseArea
来引用MouseArea
子对象。如果想使用MouseArea
等子对象中的内容,需要像这里定义pressed
属性一样,将子对象中的属性定义到根对象中。如果这里定义的SquareButton
对象的id值不是squareButton
,而是root,它也不会与SquareButton.qml
中定义的根对象的id值发生冲突,因为它们定义在不同的作用域。-
Component
组件定义只包含一个唯一的根对象,并且不能在根对象之外定义任何数据,只能使用id进行引用。Component首字母要大写哦C
,写成componet可就是另外的意思了。
import QtQuick 2.2 Item { width:100;height: 100 Component{ id:redSquare Rectangle{ color: "red" width: 10 height: 10 } } Loader{sourceComponent: redSquare} Loader{sourceComponent: redSquare;x:20} }
-