Listview 如何从Blackberry 10中可折叠列表的DataModel动态访问数据

Listview 如何从Blackberry 10中可折叠列表的DataModel动态访问数据,listview,blackberry-10,datamodel,Listview,Blackberry 10,Datamodel,我需要在BB10中用动态数据实现可折叠列表。为此,我使用Github中提供的FilteredDataModel示例。目前,示例中的所有数据都是硬编码的,但需要在ListView中动态填充数据 搜索了很多,但没有得到任何结果。我查看了这个示例,硬编码的数据位于VegetablesDataModel::data函数中。这就是要用动态数据替换的数据 首先,您需要考虑如何存储数据。列表有标题,每个标题都有一个子列表。表示标题和项目子列表的一种方法是使用 QPair<QString, QList&l

我需要在BB10中用动态数据实现可折叠列表。为此,我使用Github中提供的FilteredDataModel示例。目前,示例中的所有数据都是硬编码的,但需要在ListView中动态填充数据


搜索了很多,但没有得到任何结果。

我查看了这个示例,硬编码的数据位于VegetablesDataModel::data函数中。这就是要用动态数据替换的数据

首先,您需要考虑如何存储数据。列表有标题,每个标题都有一个子列表。表示标题和项目子列表的一种方法是使用

QPair<QString, QList<QString> >
你应该对其他一切都很好。剩下的就是用所需的数据填写m_listData。请注意任何拼写错误,因为我没有机会测试我的代码,但逻辑应该在那里

typedef QPair<QString, QList<QString> > SubList;
QList<SubList>
QList<SubList> m_listData.
QVariant VegetablesDataModel::data(const QVariantList& indexPath)
{
    QString value;

    if (indexPath.size() == 1) { // Header requested
        int header = indexPath[0].toInt();
        return m_listData[header].first; // Return the header name
    }

    if (indexPath.size() == 2) { // 2nd-level item requested
        const int header = indexPath[0].toInt();
        const int childItem = indexPath[1].toInt();
        return m_listData[header].second[childItem]; // Return the matching sublist item.

    }

    qDebug() << "Data for " << indexPath << " is " << value;

    return QVariant(value);
}
int VegetablesDataModel::childCount(const QVariantList& indexPath)
{

    const int level = indexPath.size();

    if (level == 0) { // The number of top-level items is requested
        return m_listData.length();
    }

    if (level == 1) { // The number of child items for a header is requested
        const int header = indexPath[0].toInt();
        return m_listData[header].second.length();
    }

    // The number of child items for 2nd level items is requested -> always 0
    return 0;
}