[Qt-qml] Loaders, Components and ListViews
Bartosh Wroblevksy
bartosh at live.com
Thu Dec 16 22:38:26 CET 2010
Thanks you guys are awesome.
From: jyrki.yli-nokari at nokia.com
To: christopher.ham at nokia.com; qt-qml at qt.nokia.com
Date: Thu, 16 Dec 2010 08:39:18 +0000
Subject: Re: [Qt-qml] Loaders, Components and ListViews
Well, instead of switch, I would just map the name in the listmodel to an id with a javascript object
function getComponent(name) { var components = { redRectangle: redRectangle, brownRectangle: brownRectangle, yellowRectangle: yellowRectangle, } return components[name];} …sourceComponent: getComponent(name)
Or if you are looking for a general solution, you need to group the Components as real properties of a QtObject and the index it with the id:
import Qt 4.7
ListView {
id: top
model: ListModel {
id: aModel
ListElement {
name: "Bill Smith" componentID: "redRectangle"
number: "555 3264" }
ListElement {
name: "John Brown" componentID:"brownRectangle"
number: "555 8426" }
ListElement {
name: "Sam Wise"
componentID: "yellowRectangle"
number: "555 0473" }
}
property QtObject components: QtObject {
property Component redRectangle: Component {
Rectangle{
width: 180; height: 200
color:"red"
}
}
property Component brownRectangle: Component {
Rectangle{
width: 180; height: 200
color:"brown"
}
}
property Component yellowRectangle: Component {
Rectangle{
width: 180; height: 200
color:"yellow"
}
}
}
width: 180; height: 600
delegate: Loader{
id:myLoader
sourceComponent: components[componentID];
}
}
From: ext Christoper Ham <christopher.ham at nokia.com>Date: Thu, 16 Dec 2010 11:26:54 +1000
To: <qt-qml at qt.nokia.com>
Subject: Re: [Qt-qml] Loaders, Components and ListViews
On 12/16/2010 11:11 AM, ext Bartosh Wroblevksy wrote:
So I have this little example where data of a ListElement determines what component to load in a list view something like this
ListView {
ListModel {
id: aModel
ListElement {
name: "Bill Smith"
componentID: "redRectangle"
number: "555 3264"
}
ListElement {
name: "John Brown"
componentID:"brownRectangle"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
componentID: "yellowRectangle"
number: "555 0473"
}
}
Component{
id: redRectangle
Rectangle{
width: 180; height: 200
color:"red"
}
}
Component{
id: brownRectangle
Rectangle{
width: 180; height: 200
color:"brown"
}
}
Component{
id: yellowRectangle
Rectangle{
width: 180; height: 200
color:"yellow"
}
}
width: 180; height: 600
model: aModel
delegate:Loader{
id:myLoader
sourceComponent: (componentID == "redRectangle")? redRectangle
: (componentID == "yellowRectangle"? yellowRectangle
: brownRectangle)
}
}
This all works fine and nice. But I was wondering if
sourceComponent: (componentID == "redRectangle")? redRectangle : (componentID == "yellowRectangle"? yellowRectangle : brownRectangle)
could perhaps be more generic without all the nested stuff. Something that would ideally look like this
sourceComponent: componentID
Any input would be great. Otherwise QML is fun, fun, fun.
Thanks,Bartosh
_______________________________________________
Qt-qml mailing list
Qt-qml at qt.nokia.comhttp://lists.qt.nokia.com/mailman/listinfo/qt-qml
Hi Bartosh,
It wouldn't compress the express to a single line, but to do it without
nesting you can use:
sourceComponent: {
switch (componentID) {
case "redRectangle":
redRectangle;
break;
case "yellowRectangle":
yellowRectangle;
break;
...
etc.
If you created a function that would lighten up the code a bit.
Br, Christopher
_______________________________________________
Qt-qml mailing list
Qt-qml at qt.nokia.com
http://lists.qt.nokia.com/mailman/listinfo/qt-qml
_______________________________________________
Qt-qml mailing list
Qt-qml at qt.nokia.com
http://lists.qt.nokia.com/mailman/listinfo/qt-qml
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt.nokia.com/pipermail/qt-qml/attachments/20101216/1aa03f15/attachment-0001.html
More information about the Qt-qml
mailing list