如何确定委托 QML 项目在哪个 ListView 中?

How to determine which ListView a delegate QML Item is in?

我有两个 ListView(选择和队列),它们都使用同一个委托。

我想在两个列表中以不同方式呈现一些项目信息。

如何确定 QML 项目位于哪个 ListView 中?在 QML 中没有 item.parent 我可以访问。

您可以使用附加的 ListView.view 属性 作为 folibis 提到的,但还有更好的方法。如果将委托移动到它自己的 QML 文件中,比如 Delegate.qml,您可以创建该类型的实例,只需设置一个 属性 来改变它们的外观。

例如:

ListView {
    // ...
    delegate: Delegate {
        fancy: true
    }
}

ListView {
    // ...
    delegate: Delegate {
        fancy: false
    }
}

您编写 Delegate 代码时要知道如何呈现 fancy/non-fancy 委托。例如:

Rectangle {
    property bool fancy

    color: fancy ? "steelblue" : "grey"
    // ...
}