分享

QML中Item元素介绍(QML Item Element)

 t涂鸦 2012-02-21
在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的衍生属性在它们发生改变时都会发出信号。通常信号都是按照<propertyName>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<Item> 只读
resources : list<Object> 只读
children属性包含该item的所有可见子item的一个列表。resources包含了不可见的资源,但我们可以通过资源名来
引用这些资源。通过这两个属性无需关心太多,只是在某些情况下会用到。

childrenRect.x : real
childrenRect.y : real
childrenRect.width : real
childrenRect.height : real
通过childrenRect的属性集,我们可以访问该item的子item的坐标位置大小信息。

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

data : list<Object>
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<State>
states属性是该item的所有状态的列表。
Item {
   states: [
     State { ... },
     State { ... }
     ...
   ]
 }

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

transformOrigin : enumeration
transformOrigin属性持有的是缩放和旋转的最起始点。共有9个变化起始点。如下图所示:
 
默认的transformOrigin是Item.Center.
Image {
     source: "myimage.png"
     transformOrigin: Item.BottomRight
     rotation: 45
 }
上面这个例子中,图片会绕右下角旋转45度。

transitions : list<Transition>
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视图的坐标系统。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多