Javascript 访问存储在QML ListModel中的子对象的属性

Javascript 访问存储在QML ListModel中的子对象的属性,javascript,c++,listview,qml,Javascript,C++,Listview,Qml,我想将对象存储在QML ListModel中。这些对象有几个属性。一些是简单字符串,另一些是子对象,它们也具有我希望在QML ListView委托中访问的属性 function addJSObjects(){ var jsobj1 = {"name": "Aunt Agatha", "displayLabel" : {"label" : "Agatha"}}; listModel.append(jsobj1); } 如果使用在QML中创建的java

我想将对象存储在QML ListModel中。这些对象有几个属性。一些是简单字符串,另一些是子对象,它们也具有我希望在QML ListView委托中访问的属性

function addJSObjects(){
    var jsobj1 = {"name": "Aunt Agatha",
               "displayLabel" : {"label" : "Agatha"}};
    listModel.append(jsobj1);
}
如果使用在QML中创建的javascript对象执行此操作,则ListView委托可以使用包括子对象属性在内的所有属性

function addJSObjects(){
    var jsobj1 = {"name": "Aunt Agatha",
               "displayLabel" : {"label" : "Agatha"}};
    listModel.append(jsobj1);
}
e、 g.在委托中,model.displayLabel.label将返回“Agatha”->正常

但是,如果我用等价的C++自定义对象做同样的事情,那么我会遇到问题。 我有一个带有属性displayLabel的对象“Contact”,该属性是自定义对象“ContactDisplayLabel”的实例。(即,该财产为子对象)。 这两个类都是用Q\u GADGET+Q\u DECLARE\u元类型声明的

QML将“Contact”对象实例作为参数“Contact”从C接收++

如果我像这样附加到QML ListModel:

onContactFound: {
    console.log("onContactFound signal from C++ for " + contact.displayLabel.label);
    listModel.append({"name": contact.name,
                      "displayLabel": contact.displayLabel});
}
然后在ListView委托中,model.name可用,但未定义model.displayLabel。但是,它在上面的信号处理程序中定义并可用(如console.log()的输出所证明。->NOT OK

如果我通过显式映射property by property(有效地转换为javascript对象)将其附加到QML ListModel,如下所示:

onContactFound: {
    console.log("onContactFound signal from C++ for " + contact.displayLabel.label);
    listModel.append({"name": contact.name,
                      "displayLabel": {"label": contact.displayLabel.label}});
}
然后在ListView中定义委托模型.displayLabel,并且可以访问模型.displayLabel.label。->OK

我的真实世界对象比上面的简化示例具有更多属性,但它们足够简单,可以采用这种实用方法

但是如果我的对象要复杂得多,如果它们有大量的属性和深度嵌套的子对象呢

我想我可以放弃QML ListMod,在C++侧创建一个QAcExcTimeMod子类来存储联系人,但是我不愿意移动更多的功能,然后需要从QML到C++。有更好的方法来保持QML ListMype?

新年快乐。也许看一下源代码会有所帮助。请注意,在第一种情况下,您可能会受到所讨论内容的影响()。至于最后的选择,我会投入我的两分钱……这要看情况而定。使用C++模型可以解决这个问题,但是你将为一组字符串角色引入一个新的完整类。这听起来不值得努力。作为第一步,我会尝试重新访问
联系人
对象。新年快乐。:)有趣的问题。也许看一下源代码会有所帮助。请注意,在第一种情况下,您可能会受到所讨论内容的影响()。至于最后的选择,我会投入我的两分钱……这要看情况而定。使用C++模型可以解决这个问题,但是你将为一组字符串角色引入一个新的完整类。这听起来不值得努力。作为第一步,我将尝试重新访问
联系人
对象。