QML 状态不起作用

Posted

技术标签:

【中文标题】QML 状态不起作用【英文标题】:QML states does not work 【发布时间】:2013-09-18 11:41:46 【问题描述】:

好的,这里是 QML,我想要做的是,如果一个元素是当前项目,那么盒子会变大。

import QtQuick 2.0

Rectangle 
width: 300; height: 200; color: "white"

ListModel 
    id: nameModel
    ListElement  name: "Alice"; 
    ListElement  name: "Bob";  
    ListElement  name: "Jane"; 
    ListElement  name: "Harry";  
    ListElement  name: "Wendy";  


Component 
    id: nameDelegate
    Item 
        id: delegateItem
        width: parent.width

我在这里试试这个:

states: [
            State 
                name: "current"
                when: ListView.isCurrentItem
                PropertyChanges  target: delegateItem; height: 44 
            ,
            State 
                name: "not"
                when: !ListView.isCurrentItem
                PropertyChanges  target: delegateItem; height: 26 
            ]
        state: "not"

        Text 
            text: name
            font.pixelSize: parent.height - 4
            anchors.left: parent.left
            anchors.verticalCenter: parent.verticalCenter

在这里我做了一些类似的事情来验证它是否有效,它确实有效:

            color: delegateItem.ListView.isCurrentItem ? "red" : "black"
        
    


ListView 
    id: listView
    anchors.fill: parent

    model: nameModel
    delegate: nameDelegate
    focus: true
    clip: true

    header: Rectangle 
        width: parent.width; height: 10;
        color: "#8080ff"
    
    footer: Rectangle 
        width: parent.width; height: 10;
        color: "#8080ff"
    
    highlight: Rectangle 
        width: parent.width; height: 10;
        color: "lightgray"
    


现在我想知道出了什么问题,我知道ListView.isCurrentItem 发生了变化,因为 我看到选择时字母变红。

编辑

jbh 给我的答案很好。之后我将ListView.isCurrentItem 更改为delegateItem.ListView.isCurrentItem 并且它起作用了。这是因为您无法从状态访问isCurrentItem,但如果您访问delegateItem,它确实可以工作。

【问题讨论】:

【参考方案1】:

我认为您的问题与Attached properties的定义直接相关。

附加属性,此处为ListView.isCurrentItem,仅在您的ListView 的委托组件中可用。所以它不能在外面工作,在你的情况下,在State的定义中

【讨论】:

以上是关于QML 状态不起作用的主要内容,如果未能解决你的问题,请参考以下文章

QML:鼠标悬停不起作用

Qml中的FileDialog在Release中不起作用

对于 QML,为啥 LayoutMirroring 在 Slider 中不起作用?

向 QML 地图添加新地点不起作用

Qt QML 锚在自定义项中不起作用

Qt/QML - 在 C++ 中注册 QML 类型会使 QML 代码不起作用