如何将上下文变量分配给 QML 中同名的 属性?
How to assign a context-variable to a property with the same name in QML?
这是以下代码的结果:
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
在每次迭代中将 0、1、2 等赋值给变量 index
。但是,因为我将它分配给 属性,所以这个变量被隐藏了,我无法访问它。
如果我从 Reusable.qml
中删除 property int index
,ListView
有效,但在 ListView 之外使用 Reusable
将不再有效。
有没有办法分配index: index
?
(我可以重命名 属性,但我想避免这种情况。)
您可以通过 model
前缀寻址模型相关数据。
ListView {
model: 3
delegate: Reusable { index: model.index }
}
我的建议是即使没有歧义也这样做,以提高可读性。 IE。阅读代码的开发人员可以立即看到哪些数据是本地数据属性,哪些数据是由模型提供的。
这是以下代码的结果:
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
在每次迭代中将 0、1、2 等赋值给变量 index
。但是,因为我将它分配给 属性,所以这个变量被隐藏了,我无法访问它。
如果我从 Reusable.qml
中删除 property int index
,ListView
有效,但在 ListView 之外使用 Reusable
将不再有效。
有没有办法分配index: index
?
(我可以重命名 属性,但我想避免这种情况。)
您可以通过 model
前缀寻址模型相关数据。
ListView {
model: 3
delegate: Reusable { index: model.index }
}
我的建议是即使没有歧义也这样做,以提高可读性。 IE。阅读代码的开发人员可以立即看到哪些数据是本地数据属性,哪些数据是由模型提供的。