On 4 May 2014 03:30, Nurmi J-P <jpnu...@digia.com> wrote: > On 03 May 2014, at 16:04, Ben Lau <xben...@gmail.com> wrote: > > > Hi, > > > > I have few questions about the implementation of ListModel and the > design principle about using models with object in QML application. > > > > I would like to use a model class to hold a list of item (or C++ > QObject ) with custom methods / slot functions. However, I found that after > the item/QObject is appended to the ListModel, then access the model to get > back the object. The associated method will become a property value and not > able to call. > > > > The following code demonstrates the problem: > > > > import QtQuick 2.0 > > import QtTest 1.0 > > > > TestCase { > > > > Item { > > id : testItem > > property string name : "testObject" > > function testMethod() { > > return -1; > > } > > } > > > > ListModel { > > id : listModel > > } > > > > function test_ListModel() { > > listModel.append(testItem); > > compare(listModel.count , 1); > > > > var item = listModel.get(0); > > > > compare(item !== testItem, true); // They are not the same object > > compare(item.name , "testObject"); > > > > expectFail("","The testMehod() should be a function but now it > becomes a property"); > > compare(typeof item.testMethod , "function"); > > } > > > > } > > Hi, > > Notice that ListModel::append() takes a JS dictionary, and get() returns > it. Make it something like: > > listModel.append({"item": testItem}); > var obj = listModel.get(0); > compare(obj.item, testItem); > > -- > J-P Nurmi > >
Thank for your reply. The solution works! And that inspired me for another alternative solution: import QtQuick 2.0 import QtTest 1.0 TestCase { Item { id : testItem property string name : "testObject" property var object : this function testMethod() { return -1; } } ListModel { id : listModel } function test_ListModel() { listModel.append(testItem); compare(listModel.count , 1); var item = listModel.get(0); compare(typeof item.object.testMethod , "function"); compare(item.object.testMethod() , -1); } } > _______________________________________________ > Development mailing list > Development@qt-project.org > http://lists.qt-project.org/mailman/listinfo/development >
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development