1.Item的方法
activeFocus : bool
这个属性表明当前的Item是否处于活动搞得焦点状态。,一个Item只有在处于焦点的状态或者是一个FocusScope中的一个元素下才能接收键盘输入。通常,当对某个item设置焦点以及对包含它的FocusScopes设置焦点时,activeFocus被置为真。
在下面的例子中,input元素将得到一个为真的activeFocus:
Rectangle { FocusScope { focus: true TextInput { id: input focus: true } } }
anchors.top : AnchorLine
anchors.bottom : AnchorLine
anchors.left : AnchorLine
anchors.right : AnchorLine
anchors.horizontalCenter : AnchorLine
anchors.verticalCenter : AnchorLine
anchors.baseline : AnchorLine
anchors.fill : Item
anchors.centerIn : Item
anchors.margins : real
anchors.topMargin : real
anchors.bottomMargin : real
anchors.leftMargin : real
anchors.rightMargin : real
anchors.horizontalCenterOffset : real
anchors.verticalCenterOffset : real
anchors.baselineOffset : real
这是一系列关于锚anchor的属性,用来定位这个Item的位置,在QML中,并没有全局的布局管理器存在,每个QML元素实际就是自我锚接在其他元素上,层层至上,形成一个完成的布局。
看看代码例子
Item { Image { id: pic // ... } Text { id: label anchors.horizontalCenter: pic.horizontalCenter anchors.top: pic.bottom anchors.topMargin: 5 // ... } }
这个描述了一个文本元素和一个图像元素水平中心对齐,文本元素在图像元素下方,并且相距5个像素,效果如:
Item { Image { id: pic // ... } Text { id: label anchors.left: pic.right anchors.leftMargin: 5 // ... } }
而这个则描述的是文本元素在图像像素的右侧,并且相距5个像素,效果如:
children : list<Item> 只读
resources : list<Object> 只读
children属性和resource属性都是只读属性,这代表你不能动态改变其值,children代表的所有可视子元素的队列,而resources代表当时所有不可见子元素的队列。在一般编写QML中,无需要引用这个属性定义,QML会自动分类帮助加入到这两个队列。但是如果有种需求,是将可见子元素设置为不可见,除了单独对其进行改变,还有就是加入到resources中,使其成为不可见的资源队列。
这个属性使用情况较少,但是一到遇到,就可以派生出巧妙的使用办法,可以在日后学到。
childrenRect.x : real
childrenRect.y : real
childrenRect.width : real
childrenRect.height : real
这几个childrenRect的属性集,通过这几个属性,我们可以拿到所有Item元素叠加产生的最小矩形的x坐标和y坐标,还有宽和高。
clip : bool
clip属性表明是否允许剪切,比如一个Item元素限定在另一个Item元素内,如果大小超越了Item元素,就可以使用属性价剪切掉超出的部分。
data : list<Object>
ddata一个只读属性,跟children和resources类似,他允许用户在定义元素时,不指明children和resources,他可以自动将可见的元素划入children队列,不可见的元素划入resources队列。
如代码端:
1 2 3 4 5 6 7 8 9 | Item { children: [ Text {}, Rectangle {} ] resources: [ Timer {} ] } |
就可以用下面代码端代替了
1 2 3 4 5 | Item { Text {} Rectangle {} Timer {} } |
这正是上面描述的,我们无需特意进行children和resources队列加入,data这个属性本身就会在后台帮助我们处理。
focus : bool
focus属性是否获取焦点,如果为真,并且是FocusScope的子项,那么当FocusScope获取到焦点时候,这个项也就会获得焦点,如以下代码所示:
Rectangle { FocusScope { id: scope TextInput { id: input focus: true } } }
另一种情况,那就是不作为FocusScope的子Item,那么程序启动就会获得焦点,如以下代码所示:
1 2 3 4 5 6 | Rectangle { TextInput { id: input focus: true } } |
opacity : real
不透明度,这个属性是用来设置该item的不透明性的,它可以在0.0-1.0之间取值,0.0表示完全透明,1.o表示完全不透明,
默认值为1.0,即不透明。
parent : Item
parent属性是指该Item的父Item,如果本身就最高的Item,那parent属性自然为空。
rotation : real
rotation属性表明该item绕着它的transformOrigin顺时针旋转的角度,默认认旋转0度。
这也是属于用到极少的属性,基本可以无视。
scale : real
scale属性用来表明该item缩放的比例,默认值为1,表示不缩放。
state : string
state属性是该item当前状态的名字,这个属性经常会在脚本中切换状态时用到。
如下例所示:
function toggle() {
if (button.state == 'On')
button.state = 'Off';
else
button.state = 'On';
}
一个Item的初始基准状态是用空字符表示的,因此将state赋值为空字符,就可以返回到初始基准状态。
states : list<State>
states属性是该item的所有状态的对队列。
1 2 3 4 5 6 7 8 9 10 11 | Item { states: [ State { // ... }, State { // ... } // ... ] } |
state和state将是我们未来处理QML动画的重要组成之一。
transform : list<Transform>
transform属性持有的是一组变换,详细将会在未来学到。
transformOrigin : enumeration
transformOrigin属性持有的是缩放和旋转的最起始点。共有9个变化起始点。如下图所示:
默认的transformOrigin是Item.Center.
1 2 3 4 5 | |
上面这个例子中,图片会绕右下角旋转45度。
transitions : list<Transition>
transitions属性持有了一组transition变换。
同样,transition和transitions也是处理动画效果的重要组成之一。
visible : bool
是否可见属性,自然是定义该Item是否可视,当然,推荐少用,因为经常会有异想不到的情况出现,那用什么代替,自然前面说的
opacity,不透明度属性来替代更好。
x : real
y : real
width : real
height : real
这组属性定义了该item的位置,其中x,y是相对于其父item的坐标。
z : real
z属性就是UI中基本常识z order,也就是层次的顺序。当z值越大时,绘制的层次越高,越小,则绘制层次越低,一般来说,z的数值是以QML Item定义的次序来的,所以编写QML的顺序也是很重要。
2. Item方法
相比于Item的属性,Item的方法少而简单了。
Item::childAt ( real x, real y )
返回在坐标(x,y)的子item,这里的坐标是相对于该item的。如果返回null表明没有这样一个子item。
Item::forceActiveFocus ()
强制为该item获取活动的焦点,此方法会导致该item下的的所有FocusScope都获得焦点。
object Item::mapFromItem ( Item item, real x, real y )
将item的(x,y)映射到该Item中返回与(x,y)对应的对象。
如果item为空,则(x,y)是相对于最顶层QML视图的坐标系统。
object Item::mapToItem (Item item, real x, real y)
将该Item的(x,y)映射到item中返回与(x,y)对应的对象。
如果item为空,则(x,y)是相对于最顶层QML视图的坐标系统。