首页 > 代码库 > QML之Item详解
QML之Item详解
使用QML,掌握Item元素的用法是非常有必要的,为什么这么说呢?因为QML中所有的可视化元素都继承自Item,而Item则定义了一些基本的、通用的属性和方法。这里的“可视化”需要特别说明一下,并不是所有的可视化元素都是可见的,比如说Rectangle继承自Item,本身是可见的,但是如果将其opacity透明度属性设置为0或者是其它的什么原因,就变成不可见的了,不过还是实实在在存在于UI界面的,再比如说Timer就不是可视化元素,而是一种资源。
QML中的Item元素与C++中的QQuickItem类对应,其它的元素类似,比如说Rectangle元素对应于QQuickRectangle类,基于Qt的开源性,我们可以在Qt源码中查看QQuickItem是如何实现的。Item继承自QtObject,QtObject很简单,只有一个objectName属性,类型是string,当QML与C++混合编程时,通常要在C++中查找QML对象,用到的就是objectName这个属性,用法将在后面的《QML与C++混合编程》中详细介绍。
下面对Item常用的属性做一个简单的介绍~~
activeFocus:bool值,只读,只读属性就不要尝试赋值了,否则会出错的,表明当前元素是否有活动焦点,与键盘事件有关,通过focus获取属性值。
focus:bool值,默认false,设置元素是否有焦点区以接收键盘事件。
activeFocusTab:bool值,默认false,与Tab键有关,设置当前元素是否在Tab键焦点范围内。
anchors:组属性,用于布局,用法将在后面的《QML UI布局》中详细介绍。
antialiasing:bool值,默认false,设置抗锯齿效果。
baselineOffset:int类型,在当前坐标系下设置基准位置。
data:list<Object>类型,默认属性,默认属性也就没必要显式地把关键字写出来,是可以省略的,作为一个对象列表,自动把可视化元素加到了children元素列表中,把其它的对象则加到了resources对象列表中。
children:list<Item>类型,参照data属性。
resources:list<Object>类型,参照data属性。
childrenRect:组属性,有x、y、width、height四个属性,都是real类型,只读,叠加了子元素的位置和大小。
clip:bool值,默认false,设置为true时将剪切子元素。
enabled:bool值,默认true,设置为false时将不再响应鼠标和键盘事件,对子元素也有影响。
visible:bool值,默认true,设置为false时元素不可见,不能响应鼠标事件,但可以处理键盘事件。
opacity:real类型,默认为1,可以在0.0到1.0之间设置元素的透明度,会影响子元素的显示效果,但不改变子元素的opacity值,为0时完全透明但不影响事件处理。
visibleChildren:list<Item>类型,只读,会受到visible的影响。
height/width:real类型,设置元素的大小。
implicitHeight/implicitWidth:real类型,大多数元素默认为0x0,比如说Rectangle,用来设置元素的自然大小,但有些元素是不一样的,比如说Text的这对属性是只读的。
layer:组属性,设置图层效果,常与OpenGL结合。
parent:Item类型,可用来设置当前元素的父对象。
rotation:real类型,默认为0,设置元素旋转角度,值为正时顺时针旋转,为负时逆时针旋转。
scale:real类型,默认为1,设置元素显示比例,值为负时有镜像效果。
smooth:bool类型,默认true,主要用于图像。
state:string类型,默认为空字符串,如果设置了state也可以用空字符串来赋值以恢复默认状态。
states:list<State>类型,状态列表。
transform:list<Transform>类型,Transform列表,Transform包括了Rotation、Scale和Translate。
transformOrigin:枚举类型,默认为Item.Center,设置scale、rotation变换原点,枚举值包括Item.TopLeft/Top/TopRight/Left/Center/Right/BottomLeft/Bottom/BottomRight。
transitions:list<Transition>类型,Transition列表,常用来设置一些动画。
x/y:real类型,设置元素的位置,坐标是相对parent的。
z:real类型,默认为0,设置兄弟元素间的堆叠顺序,数值大的会覆盖数值小的,可以是负值。
QML之Item详解