如何在QML中为具有相同名称的属性分配上下文变量?

时间:2017-02-07 00:12:05

标签: qml qtquick2 shadowing

这是以下代码的结果:

Line 1234, Line 0, Line 0, Line 0

main.qml

import QtQuick 2.8 

Item {
    Reusable {
        index: 1234      // reusable with a custom index
    }   

    ListView {
        anchors { fill: parent; margins: 20; topMargin: 50 }
        model: 3

        // Reusable with an index given by the ListView
        delegate: Reusable {
            index: index // <- does not work, both 'index' point to 
                         //    the index property
        }   
    }   
}

Reusable.qml

import QtQuick 2.8 

Text {
    property int index
    text: "Line " + index
}

问题描述:

ListView在每次迭代时为变量index分配0,1,2等。但是,因为我将其分配给属性,所以此变量被遮蔽,我无法访问它。

如果我从property int index删除Reusable.qml,则ListView有效,但在ListView之外使用Reusable不再有效。

有没有办法分配index: index

(我可以重命名可行的属性,但我想避免这种情况。)

1 个答案:

答案 0 :(得分:5)

您可以通过model前缀来解决与模型相关的数据。

ListView {
    model: 3

    delegate: Reusable { index: model.index }
}

我的建议是即使没有含糊不清也会这样做,作为可读性的手段。即阅读代码的开发人员可以立即看到哪些数据是本地属性,哪些数据是由模型提供的。