Hello,
Consider the following main.qml code, which works perfectly:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
ApplicationWindow {
title: qsTr("Hello Middle-Earth")
width: 640
height: 480
visible: true
VisualDataModel {
id: fellowship
model: ListModel {
ListElement {
name: "Aragorn"
desc: "Ranger"
}
ListElement {
name: "Frodo"
desc: "Ring-bearer"
}
ListElement {
name: "Gandalf"
desc: "Wizard"
}
}
delegate: Text {
width: ListView.width
text: name + " - " + desc
}
}
ListView {
model: fellowship
anchors.fill: parent
}
}
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
ApplicationWindow {
title: qsTr("Hello Middle-Earth")
width: 640
height: 480
visible: true
VisualDataModel {
id: fellowship
model: ListModel {
ListElement {
name: "Aragorn"
desc: "Ranger"
}
ListElement {
name: "Frodo"
desc: "Ring-bearer"
}
ListElement {
name: "Gandalf"
desc: "Wizard"
}
}
delegate: Text {
width: ListView.width
text: name + " - " + desc
}
}
ListView {
model: fellowship
anchors.fill: parent
}
}
To copy to clipboard, switch view to plain text mode
Now consider the following, custom VisualDataModel type, MyVisualDataModel.qml:
import QtQuick 2.4
VisualDataModel {
property Component innerDelegate: null
delegate: Loader {
id: loader
sourceComponent: innerDelegate
}
}
import QtQuick 2.4
VisualDataModel {
property Component innerDelegate: null
delegate: Loader {
id: loader
sourceComponent: innerDelegate
}
}
To copy to clipboard, switch view to plain text mode
Here is how I want to use that type in main:
MyVisualDataModel {
id: fellowship
model: ListModel {
ListElement {
name: "Aragorn"
desc: "Ranger"
}
ListElement {
name: "Frodo"
desc: "Ring-bearer"
}
ListElement {
name: "Gandalf"
desc: "Wizard"
}
}
innerDelegate: Text {
width: ListView.width
text: name + " - " + desc
}
}
MyVisualDataModel {
id: fellowship
model: ListModel {
ListElement {
name: "Aragorn"
desc: "Ranger"
}
ListElement {
name: "Frodo"
desc: "Ring-bearer"
}
ListElement {
name: "Gandalf"
desc: "Wizard"
}
}
innerDelegate: Text {
width: ListView.width
text: name + " - " + desc
}
}
To copy to clipboard, switch view to plain text mode
And here is what happens:
qrc:/main.qml:30: ReferenceError: name is not defined
qrc:/main.qml:30: ReferenceError: name is not defined
qrc:/main.qml:30: ReferenceError: name is not defined
How do I access model data in a Loader?
Update: plugging my question into Google before pressing submit here led me to this question on Stack Overflow. It appears to work perfectly; see below.
in main.qml:
innerDelegate: Text {
width: ListView.width
text: modelData.name + " - " + modelData.desc
}
innerDelegate: Text {
width: ListView.width
text: modelData.name + " - " + modelData.desc
}
To copy to clipboard, switch view to plain text mode
in MyVisualDataModel.qml:
delegate: Loader {
id: loader
property variant modelData: model
sourceComponent: innerDelegate
}
delegate: Loader {
id: loader
property variant modelData: model
sourceComponent: innerDelegate
}
To copy to clipboard, switch view to plain text mode
Posting for posterity.
Bookmarks