0

BB 10 で動的データを使用して折りたたみ可能なリストを実装する必要があります。このために、Github で提供されている FilteredDataModel の例を使用しています。現在、例ではすべてのデータがハードコードされていますが、ListView では動的にデータを入力する必要があります。

たくさん検索しましたが、何も得られませんでした。

4

1 に答える 1

0

その例を見てみると、ハードコーディングされたデータは、VegetablesDataModel::data 関数にあります。これが、動的データに置き換えたいデータです。

まず、データをどのように保存するかを考える必要があります。リストにはヘッダーがあり、各ヘッダーにはサブリストがあります。項目のヘッダーとサブリストを表す 1 つの方法は、

QPair<QString, QList<QString> >

QPair::first はヘッダーになり、QPair::second はサブアイテムのリストになります。

タイプを簡単にするために、typedef を使用できます。

typedef QPair<QString, QList<QString> > SubList;

次に、ListView 内のすべてのデータを表すには、上記の SubList 構造体のリストが必要です

QList<SubList>

次に、VegetablesDataModel によってデータが返される方法を置き換えます。上記の項目リストについて、VegetablesDataModel に新しいメンバー変数を追加します。

QList<SubList> m_listData.

後は、VegetablesDataModel::data および VegetablesDataModel::childCount 関数の内容を置き換えるだけです。

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);
}

これでデータが処理されますが、listView に要素の数を伝える必要があります。

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;
}

他のすべてが同じままでよいはずです。あとは、必要なデータを m_listData に入力するだけです。コードをテストする機会がないため、スペルミスに気をつけてください。ただし、ロジックはそこにあるはずです。

于 2013-07-26T02:04:39.013 に答える