在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视图的坐标系统。 |
|