1

さて、ここに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と機能します。

4

1 に答える 1

2

あなたの問題はAttached propertiesの定義に直接関係していると思います。

添付プロパティ hereListView.isCurrentItemは、 のデリゲート コンポーネントでのみ使用できますListView。したがって、外部では機能しません。あなたの場合、の定義ではState

于 2013-09-18T12:01:22.027 に答える