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只保存非可视化子类
- 当对象需要处理键盘事件时,务必确保当前对象已经获得焦点