On 11/09/2010, at 12:10 AM, ext Cornelius Hald wrote:
> Hi,
>
> I'm exposing a QList<QObject*> property from C++ to QML. There I can
> access it, for example, with the following code.
>
> ListView {
> anchors.fill: parent
> model: myModel.dataObjects //dataObjects is QList<QQobject*>
> delegate: Rectangle {
> height: 25
> width: 100
> color: model.modelData.color
> Text { text: model.modelData.name}
> }
> }
>
> Now I've tried to put some dummy data in place to simulate the model if
> the QML code is run without C++ backend. So I've created the following.
>
> // dummydata/myModel.qml
> import Qt 4.7
> Item {
> property alias dataObjects: listModel
> ListModel {
> id: listModel
> ListElement {
> name: "Dummy Peter"
> color: "orange"
> }
> ListElement {
> name: "Dummy Paul"
> color: "yellow"
> }
> }
> }
>
> Unfortunately this is not working as expected. It only works if I remove
> the "modelData" part from the delegate. E.g. the following works.
>
> ListView {
> anchors.fill: parent
> model: myModel.dataObjects //dataObjects is QList<QQobject*>
> delegate: Rectangle {
> height: 25
> width: 100
> color: model.color // removed modelData
> Text { text: model.name} // removed modelData
> }
> }
>
> How can I create a dummy model that I can use as a drop-in replacement for my
> QList<QObject*> model?
Hi,
There is a discrepancy in how QAbstractItemModel models and QList<QObject*>
models expose data (see
http://doc.qt.nokia.com/4.7-snapshot/qdeclarativemodels.html#qlist-qobject and
http://bugreports.qt.nokia.com/browse/QTBUG-13576 for more). To work around
that, you'll need your dummy data to be a list of objects rather than a proper
model, to mimic what you are doing in C++. Here's an example of how your could
modify your above code to do that:
// MyObject.qml
import Qt 4.7
QtObject {
property string name
property color color
}
// dummydata/myModel.qml
import Qt 4.7
QtObject {
property list<QtObject> dataObjects:[
MyObject {
name: "Dummy Peter"
color: "orange"
},
MyObject {
name: "Dummy Paul"
color: "yellow"
}
]
}
Alternatively, you could use a model rather than a list of objects on the C++
side, and then model.color, model.name, etc should work for both. If you'd like
to go this route you might be interested in QObjectListModel
(http://qt.gitorious.org/qt-labs/qml-object-model), which is meant to be a more
powerful alternative to QList<QObject*> that retains much of the ease of use of
working with a simple list.
Regards,
Michael
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-qml