2013-02-18 336 views
1

我在尝试访问分配给QML Repeater模型的C++列表数据时遇到问题。QML - 通过模型访问QList数据

可以在没有代表的帮助下访问这些数据吗?

例如: C++:

QList<MyOwnStruct> GetListData() // Invokable from qml 
{ 
    QList<MyOwnStruct> infoData 
    .... // Appended data 
    return infoData 
} 

QML:

Row { 
    Repeater { 
     model: GetListData() 
     .... 
    } 
} 

在上面的例子中,我是能够得到INFODATA哪个中继器重复的确切计数。但是我无法像infoData那样从每个单独的元素获取更多信息。

回答

1

如果您想要访问结构的元素,则需要将MyOwnStruct转换为QML可以理解的内容,例如QVariantMap

所以你可以做这样的事情。

QVariantMap MyClass::GetData(int index) // Invokable 
{ 
    QVariantMap var; 

    MyOwnStruct infoData = infoListData[index]; 

    // Appended data 
    var.insert("elem_a", infoData.element_a); 
    var.insert("elem_b", infoData.element_b); 

    return var; 
} 

然后在QML,您可以访问是一样的东西

var data_at_index = getData(index) 
var a = data_at_index["elem_a"] 

你的中继模式可以只是一个Q_PROPERTY整数返回列表的数量。