0
点赞
收藏
分享

微信扫一扫

QML 所有可视元素的基类Item

1.Item类型基本概述

Item类型是Qt Quick中所有可视化项目的基类,类似Qt C++的QWidget,Qt Quick中的所有可视化项目都继承自Item。Item对象本身没有视觉外观(不可视),但它定义了视觉项中通用的所有属性,如x和y位置、宽度和高度、锚定和键处理支持

2 Item类型的基本属性

Item作为所有可视类的基类,属性众多,本节只讲除了布局属性和转换属性之外的属性,关于布局属性和转换属性,会在下一章节单独列出

2.1 activeFocus:bool 属性

该属性只读,指示项目是否具有活动焦点。 如果activeFocus为true,则该项要么是当前接收键盘输入的项,要么是当前接收键盘输入的项的FocusScope的root项。通常,activeFocus是通过在项及其包含的FocusScope对象上设置焦点来获得的。在下面的示例中,input和focusScope对象将具有活动焦点,而根矩形对象则没有。

2.2 activeFocusOnTab:bool 属性

属性决定当前项是否是加入Tab的切换链中,而不是对table按键是否捕获,可以直接使用Key.onXXX来处理Tab按键从而手动切换焦点,从而验证在activeFocusOnTab属性false的情况下,处理Tab按键,示例代码如下

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
id:root
visible: true
width: 640
height: 480
title: qsTr(Hello World)
Item{
id:itemX
anchors.fill: parent
activeFocusOnTab: false
property int index: 1
Rectangle{
id:rct1
x:200
y:220
width: 50
height: 50
focus: true
color: focus ? red : lightgray
}
Rectangle{
id:rct2
x:280
y:220
width: 50
height: 50
color: focus ? red : lightgray
}
Rectangle{
x:360
y:220
id:rct3
width: 50
height: 50
color: focus ? red : lightgray
}
Keys.onTabPressed: {
index++;
if(index === 1){
rct1.focus = true;
}else if(index === 2){
rct2.focus = true
}else if(index === 3){
rct3.focus = true
}
if(index === 3){
index = 0
}
}
}

}

2.3 antialiasing:bool 属性

由视觉元素用于决定项目是否应该使用反锯齿。在某些情况下,带有反锯齿的项目需要更多的内存,而且可能渲染得更慢,主要用在Canvas绘制中,使用反锯齿,与QPainter在绘制时的反锯齿方法一致。

2.4 children:list<Item>属性

children属性包含此项的可视子项列表。resources属性包含要按名称引用的非可视化资源。 在添加子项或资源时,通常不需要引用这些属性,因为默认的data属性会自动将子对象分配给适当的子属性和资源属性。

2.5 clip:bool属性

此属性保存剪辑是否已启用。默认剪辑值为false。 如果启用了剪切,则项目将把自己的绘画及其子绘画剪辑到边界矩形上,超出边界矩形的部分将不再绘制,示例代码如下

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
id:root
visible: true
width: 640
height: 480
title: qsTr(Hello World)
//Item项
Item {
id: itemX
x:0;y:0
width: 200
height: 200
//绘制Item的边界线,使得Item轮廓线看得见
Rectangle{
anchors.fill: parent
border.color: #555
}
//绘制矩形
Rectangle{
id:textRect
x:0;y:0
width: 350
height: 350
color: #150532
}
clip: true //当属性值为false时,testRect的宽高若大于Item的宽高,超出部分会被绘制在Item上,
//当属性值为true时,超出部分不再绘制
}

}

2.6 data:list<QObject>属性

data属性允许在项中自由混合可视化子项和资源。如果将一个可视项分配给数据列表,它将成为子项;如果将任何其他对象类型分配给数据列表,它将作为资源添加,例如如下代码

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
id:root
visible: true
width: 640
height: 480
title: qsTr(Hello World)
Item {
id:testItem
Text {}
Rectangle {}
Timer {}
}
Component.onCompleted: {
console.log(testItem.data[0]);
console.log(testItem.data[1]);
console.log(testItem.data[2]);
console.log(------------------------);
console.log(testItem.children[0]);
console.log(testItem.children[1]);
console.log(testItem.children[2]);
console.log(testItem.resources[0]);
}
}
/*****************测试结果如下********************
qml: QQmlTimer(0x563a701e7150)
qml: QQuickText(0x563a701e6290)
qml: QQuickRectangle(0x563a701e7490) //data包含可视与非可视
qml: ------------------------
qml: QQuickText(0x563a701e6290)
qml: QQuickRectangle(0x563a701e7490)
qml: undefined //child不包含非可视对象
qml: QQmlTimer(0x563a701e7150) //resource包含可视对象
**************************************************/

2.7 enabled:bool属性

此属性保存项是否接收鼠标和键盘事件。默认情况下,这是true。 设置此属性直接影响子项的启用值。当设置为false时,所有子项的启用值也变为false。当设置为true时,子项的启用值将返回为true,除非它们已显式设置为false。 将此属性设置为false将自动导致activeFocus设置为false,并且该项将不再接收键盘事件

2.8 focus:bool 属性

与Qt C++的setFocus()focus()功能一致,设置对象是否获取焦点和设置焦点,只有设置了焦点的对象才可以接收键盘事件。

2.9 height与implicitHeight:real

设置对象的高度和默认高度,默认高度一般用在组件封装的时候设置

2.10 width与imolicitWidth

设置对象的宽度和默认宽度

2.11 opacity:real [0.0 1.0]属性

此属性保存项目的不透明度。不透明度指定为0.0(完全透明)到1.0(完全不透明)之间的数字。缺省值为1.0。 当设置此属性时,指定的不透明度也会单独应用于子项(父对象的不透明度也会作用于子项)。在某些情况下,这可能会产生意想不到的效果。

2.12 parent:Item属性

保存当前对象的可视化父类对象

2.13 rotation:real

保存当前对象的旋转属性,缺省值时0表示当前不旋转,旋转顺序默认顺时针旋转

2.14 scale:real

此属性保存该项的比例因子。小于1.0的比例尺将导致以更小的尺寸呈现项,而大于1.0的比例尺将以更大的尺寸呈现项。负比例会导致呈现时镜像项目

2.15 smooth:bool

主要用于基于图像的项目,以决定项目是否应该使用平滑采样。平滑采样采用线性插值法,非平滑采样采用最近邻法。 在Qt Quick 2.0中,这个属性对性能的影响很小。 默认情况下,该属性被设置为true

2.16 x,y,z:real

x,y定义对象相对于父类的左上角绝对坐标。z定义对象的z序列,z值越大,在图层上就越顶层

2.17 visible:bool

定义当前对象是否可视,在布局中设置可视与不可视会影响布局,这与Qt C++保持一致。

3. 小知识总结

  • 当父对象设置opacity属性时,会影响子项的opacity,具有传递性,除非子项显式设置了自己的opacity
  • data属性保存了当前对象的可视化子类与非可视化子类,children属性只保存可视化子类,resource只保存非可视化子类
  • 当对象需要处理键盘事件时,务必确保当前对象已经获得焦点
举报

相关推荐

0 条评论