分类: C/C++
2015-06-23 11:17:47
Item类型是QtQuick模块中所有可视元素的基类。虽然Item对象本身不可渲染,但它却定义了可视元素的共同所有的属性,比如:x,y,width,height,以及锚点与键处理等等。
Item类型在把多个元素组织到一个对象内时非常有用:
####################################################################################################
import QtQuick 2.0
Item {
Image {
source: "tile.png"
}
Image {
x: 80
width: 100
height: 100
source: "tile.png"
}
Image {
x: 190
width: 100
height: 100
fillMode: Image.Tile
source: "tile.png"
}
}
通过keys附加属性,所有以Item为基类的对象都能够进按键处理。keys提供了基本的按键信号,如pressed、released以及特定键的信号spacePressed等等。
下面例子展示了item对象如何捕捉键盘焦点处理按键动作,当一个键压下或释放后,会产生键盘事件并发送到焦点所在的item对象。
####################################################################################################
import QtQuick 2.0
Item {
focus: true//对象获取焦点
Keys.onPressed: {//对象捕捉按键压下
if (event.key == Qt.Key_Left) {
console.log("move left");
event.accepted = true;
}
}
Keys.onReturnPressed: console.log("Pressed return");//对象捕捉回车键压下
}
activeFocus属性:只读,指示对象是否具有活动焦点
只有对象是当前获得键盘输入的元素,或者作为当前获得键盘输入的元素的FocusScope祖先时,activeFocus才为真。
一般情况下通过设置对象以及包围它的FocusScope对象的focus属性获得活动焦点。
focus属性:
这个属性指示对象是否具有焦点。如果FocusScope元素内一个对象具有焦点,那它在focusScope具有活动焦点的同时也获得活动焦点。
任何时候只有一个元素的focus为真,在鼠标点击下focus变为真,activeFocus无影响
下面例子显示,拥有活动焦点的是input对象和focusScope对象,而rectange对象没有活动焦点,要用方法forceActiveFocus()强制激活活动焦点。
####################################################################################################
import QtQuick 2.0
Rectangle {
width: 100; height: 100
FocusScope {
id: focusScope
focus: true
TextInput {
id: input
focus: true
}
}
}
锚接指是的通过指定对象与其他元素的关系来确定对象位置的方式。
top,bottom,left,right和fill这些锚接都能够设置各自的边缘空白,而通过anchors.margins以相同值一次性设置所有锚接的空白。这样做不会覆盖掉之前的指定空白。要清除空白只要把锚接的值设置为nudefined既可。注意空白只能设置到使用锚接的元素。
可以对horizontal center,vertical center和baseline锚接进行偏移。
####################################################################################################
Item {
Image {
id: pic
// ...
}
Text {
id: label
anchors.horizontalCenter: pic.horizontalCenter//文字对齐到图片的水平中央
anchors.top: pic.bottom//文字上边缘距离图片下边缘5
anchors.topMargin: 5
// ...
}
}
Item {
Image {
id: pic
// ...
}
Text {
id: label
anchors.left: pic.right //文字在距离图片5的位置
anchors.leftMargin: 5
// ...
}
}
anchors.fill能够使对象与其它元素拥有相同的几可形状,那就是把四个方向的锚接连接到该元素的四条边上。
注意你只能把一个对象锚接到它的父亲或兄弟身上。
children:list
这个属性保存该对象所有可渲染的孩子元素。而resourc属性保存的是该对象所有非渲染孩子元素或资源,它们只通过名字来引用。
在把孩子元素或资源添加到对象时,并不需要引用children和resource属性,因为data属性在适当地分配子元素到这些属性上。
childrenRect group
childrenRect.x : real
childrenRect.y : real
childrenRect.width : real
childrenRect.height : real
这些属性可以调整子元素的位置和大小
data:list
data属性是item对象的默认属性,即所有在item内部声明的对象都自动放置到data列表中,data列表混合管理可渲染与非可渲染元素,如果把一个可视对象放到data列表里,那它就成为item的孩子,自动添加到属性children列表中。如果放入其它类型的对象,那它就被当作是资源而自动地添加到source属性中。
####################################################################################################
下面两种语法是等效的:
Item {
Text {}//可渲染
Rectangle {}//可渲染
Timer {}//非可渲染
}
Item {
children: [
Text {},
Rectangle {}
]
resources: [
Timer {}
]
}
enabled:boos属性
这个属性控制item对象是否能够接收鼠标或键盘事件,默认为真。设置对象的enabled属性会影响到这个对象所有孩子的enable值。设置为false时,所有孩子的enable值也为false;设置为true时,除非孩子的enable值显式地置为false,否则也为true。这个属性置为false时,也会导致activeFocus为false。