如何在QML中基于ListModel创建不同的组件

  • 本文关键字:创建 组件 ListModel QML qt qml
  • 更新时间 :
  • 英文 :


有9个参数,我需要使用TextField1输入值。

所以我用

ListModel lstPara { 
ListElement{
text:"A";value:"123"
}...(9 Elements)
}
Grid{
id: grid
anchors.fill: parent
columns: 3
spacing: 5
Repeater {
id: rpPara
model: lstPara
delegate: TextField1 {
}
}
}

但是现在我需要在另一个QML类型中使用一个参数来设置值,所有其他参数都在TextField1中使用。

我尝试像这样定义ListModel

ListModel lstPara{
ListElement {
text: "A"; 
type: 1"; 
value: "123"
}
ListElement {
text: "B"; 
type: 2"; 
value: "321"
}
...(9 Elements)
}
Grid{
id: grid
anchors.fill: parent
columns: 3
spacing: 5
Repeater {
id: rpPara
model: lstPara
(some code : like this)
delegate: {
return type === 1 ? 
TextField1 {
}
:
another QML type {
}
}
}
}

上面的代码不能运行。我不想写8 TextField1和1另一个QML类型。

所以,有一种方法来使用ListModel吗?

你不能在这样的条件表达式中直接使用Item声明,但是你可以在Component中这样做。下面是一个示例,说明如何使用Loader作为委托,并根据模型选择加载哪个组件:

ListModel {
id: lstPara
ListElement {
text: "A"
type: 1
value: "123"
}
ListElement {
text: "B"
type: 2
value: "321"
}
}
Grid {
id:grid
anchors.fill: parent
columns: 3
spacing: 5
Repeater {
id: rpPara
model: lstPara
delegate: Loader {
sourceComponent: type === 1 ? someText : otherText
onLoaded: {
item.text = text
item.value = value
}
}
}
Component {
id: someText
Text {
property string value
color: "blue"
}
}
Component {
id: otherText
Text {
property string value
color: "red"
}
}
}

最新更新