使用 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/Bottom Right。
transitions : list<Transition> 类型, Transition 列表,常用来设置一些动画。
x/y : real 类型,设置元素的位置,坐标是相对 parent 的。
z : real 类型,默认为 0 ,设置兄弟元素间的堆叠顺序,数值大的会覆盖数值小的,可以是负值。
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/Bottom Right。
transitions : list<Transition> 类型, Transition 列表,常用来设置一些动画。
x/y : real 类型,设置元素的位置,坐标是相对 parent 的。
z : real 类型,默认为 0 ,设置兄弟元素间的堆叠顺序,数值大的会覆盖数值小的,可以是负值。