QML - 通过模型访问QList数据

时间:2013-02-18 10:34:34

标签: qml

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

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

例如: C ++:

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

QML:

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

在上面的例子中,我能够获得转发器重复的infoData的确切数量。但我无法从infoData获得更多信息,如每个元素。

1 个答案:

答案 0 :(得分: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"]

您的Repeater模型可以只是一个Q_PROPERTY整数,它返回列表的计数。