Chinaunix首页 | 论坛 | 博客
  • 博客访问: 276374
  • 博文数量: 28
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 326
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-10 12:12
文章分类

全部博文(28)

文章存档

2020年(1)

2018年(1)

2017年(3)

2015年(7)

2014年(9)

2010年(3)

2006年(4)

我的朋友

分类: 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 ListView的默认属性

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。

阅读(3142) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~