华拓科技网
您的当前位置:首页QML中Item元素介绍(QMLItemElement)

QML中Item元素介绍(QMLItemElement)

来源:华拓科技网


QML中Item元素介绍(QMLItemElement)

在Qt Declarative中所有可视元素都继承自Item, Item本身并不可视,只是用它定义了所有可视元素公有的属性。

例如像x,y坐标,width宽度,height高度,锚anchoring以及按键处理等。

Item还有个用处就是将很多的item组织起来。如下所示:

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\"

}

}

Identity

每个item都有一个id,它是这个item的唯一标识。在绑定或是语句中可以用这个id可以用来索引到具体的那个item,

就像下面这样:

Text { id: myText; ... }

Text { text: myText.text }

但这个id不应该认为是个属性, myText.id这样的写法是没有意义的。

Key Handling

所有继承自Item的可视化元素都可以通过Keys这个属性来处理按键。Keys属性提供一些基础的按键处理,例如onPressed

和onReleased,当然也有一些特定按键的处理,例如onCancelPressed。下面这个例子描述了如何给一个item设置焦点,

如何通过onPressed和onSelectPressed来处理左键。

Item {

focus: true

Keys.onPressed: {

if (event.key == Qt.Key_Left) {

console.log(\"move left\");

event.accepted = true;

}

}

Keys.onSelectPressed: console.log(\"Selected\");

}

Property Change Signals

Item的很多属性以及Item的衍生属性在它们发生改变时都会发出信号。通常信号都是按照Changed命名的,

即属性名后面加上Changed。比如说当x属性改变时,xChanged信号会发出。注意通常也会有具体的槽来处理这个信号。

属性说明

activeFocus : bool

这个属性表明当前的item是否处于焦点状态。一个item只有在处于焦点的状态或者是一个FocusScope中的一个元素下才能

接收键盘输入。通常,当对某个item设置焦点以及对包含它的FocusScopes设置焦点时,activeFocus被置为真。在下面的

例子中,input将会有一个为真的activeFocus。

Rectangle {

FocusScope {

focus: true

TextInput {

id: input

focus: true

}

}

}

anchors.top : AnchorLine

anchors.bottom : AnchorLine

anchors.left : AnchorLine

anchors.right : AnchorLine

anchors.horizontalCenter : AnchorLine

anchors.verticalCenter : AnchorLine

anchors.baseline : AnchorLine

anchors.fill : Item

anchors.centerIn : Item

anchors.margins : real

anchors.topMargin : real

anchors.bottomMargin : real

anchors.leftMargin : real

anchors.rightMargin : real

anchors.horizontalCenterOffset : real

anchors.verticalCenterOffset : real

anchors.baselineOffset : real

这几个有关锚anchor的属性是用来定位这个item的,具体解释请参考QML中基于锚的布局

children : list 只读

resources : list 只读

children属性包含该item的所有可见子item的一个列表。resources包含了不可见的资源,但我们可以通过资源名来

引用这些资源。通过这两个属性无需关心太多,只是在某些情况下会用到。

childrenRect.x : real

childrenRect.y : real

childrenRect.width : real

childrenRect.height : real

通过childrenRect的属性集,我们可以访问该item的子item的坐标位置大小信息。

clip : bool

clip属性表明是否允许剪切。

data : list

data属性允许我们自由组合子item和资源。当向data列表中加入一个可视的item时,它会成为这个item的子item,

如果是其他类型,则会作为资源加进来。这样一来,像下面这段代码

Item {

children: [

Text {},

Rectangle {}

]

resources: [

Timer {}

]

}

我们就可以这样写了:

Item {

Text {}

Rectangle {}

Timer {}

}

focus : bool

focus属性用来表明在囊括它的最小FocusScope中,这个item是否有焦点。如果为真,则当囊括它的最小FocusScope获得

焦点时,这个item也会获得焦点。

Rectangle {

FocusScope {

id: scope

TextInput {

id: input

focus: true

}

}

}

在上面的代码中,当scope获得焦点时input将会获得焦点。我们可以把整个页面看成是一个FocusScope,在下面的代码中,

程序启动时input将会获得焦点。

Rectangle {

TextInput {

id: input

focus: true

}

}

opacity : real

顾名思义,这个属性是用来设置该item的不透明性的,它可以再0-1之间取值,0表示完全透明,1表示完全不透明,

默认值为1,即不透明。这个属性是一个有继承性的属性,也就是说这个属性会遗传给它的所有子item。

parent : Item

parent属性是指该item的父item.

rotation : real

rotation属性表明该item绕着它的transformOrigin顺时针旋转的角度。默认旋转0度。

scale : real

scale属性用来表明该item缩放的比例。默认值为1,表示不缩放。

state : string

state属性是该item当前状态的名字。这个属性经常会在脚本中切换状态时用到。如下例所示:

function toggle() {

if (button.state == 'On')

button.state = 'Off';

else

button.state = 'On';

}

如果一个item处于它的基状态,即没有显示地给它赋予某个状态时,这个状态是一个空字符,你可以将state赋值

为空字符,这样它便会回到基状态。

states : list

states属性是该item的所有状态的列表。

Item {

states: [

State { ... },

State { ... }

...

]

}

transform : list

transform属性持有的是一组变换。详情请参考Transform元素。

transformOrigin : enumeration

transformOrigin属性持有的是缩放和旋转的最起始点。共有9个变化起始点。如下图所示:

默认的transformOrigin是Item.Center.

Image {

source: \"myimage.png\"

transformOrigin: Item.BottomRight

rotation: 45

}

上面这个例子中,图片会绕右下角旋转45度。

transitions : list

transitions属性持有了一组transition变换。详情请参考Transitions元素。

visible : bool

顾名思义表示是否可见。默认可见。

x : real

y : real

width : real

height : real

这组属性定义了该item的位置,其中x,y是相对于其父item的坐标。

z : real

z属性可以认为是该item的z轴坐标。z越大越画在前面,如果为负值则画在父Item的后面。相同z值的item按照定义

的次序来画。默认值为0。

方法说明

Item::childAt ( real x, real y )

返回在坐标(x,y)的子item,这里的坐标是相对于该item的。如果返回null表明没有这样一个子item。

Item::forceActiveFocus ()

强制为该item设置焦点,此方法会导致该item所处的所有FocusScope获得焦点。

object Item::mapFromItem ( Item item, real x, real y )

将item的(x,y)映射到该Item中返回与(x,y)对应的对象。

如果item为空,则(x,y)是相对于最顶层QML视图的坐标系统。

object Item::mapToItem (Item item, real x, real y)

将该Item的(x,y)映射到item中返回与(x,y)对应的对象。

如果item为空,则(x,y)是相对于最顶层QML视图的坐标系统。

因篇幅问题不能全部显示,请点此查看更多更全内容