6

私はQtモデルを持っていますが、これは非常によくQAbstractListModel. 各「行」は、に格納したオブジェクトを表しますQList。これを で表示しQMLていListViewます。ただし、各オブジェクトには、たまたま文字列の配列である 1 つのプロパティがあります。ListViewこれを、その行を表示するデリゲート内に表示したいと思います。しかし、そのモデルを (オブジェクトの文字列配列プロパティ用に) に公開する方法がわかりませんQML。モデルは であるため、データ関数を介して公開することはQObjectsできませんQVariants。代わりにを使用することを考えQAbstractItemModelましたが、自分の のモデルを取得する方法がまだわかりませんListView。念のため、私はQt5.0.0 リリースを使用しています。

4

1 に答える 1

6

メインの QAbstractListModel からQVariantList返すことができ、これをデリゲートにある内部ListViewにモデルとして割り当てることができます。例として、内部モデルを使用した非常に単純な 1 行モデルを持つ小さな例を追加しました。

C++ モデル クラス:

class TestModel : public QAbstractListModel
{
  public:

  enum EventRoles {
    StringRole = Qt::UserRole + 1
  };

  TestModel()
  {
    m_roles[ StringRole] = "stringList";
    setRoleNames(m_roles);
  }

  int rowCount(const QModelIndex & = QModelIndex()) const
  {
    return 1;
  }

  QVariant data(const QModelIndex &index, int role) const
  {
    if(role == StringRole)
    {
      QVariantList list;
      list.append("string1");
      list.append("string2");
      return list;
    }
  }

  QHash<int, QByteArray> m_roles;
};

このモデルを QML に設定して、次のように使用できます。

ListView {
  anchors.fill: parent
  model: theModel //this is your main model

  delegate:
    Rectangle {
      height: 100
      width: 100
      color: "red"

      ListView {
        anchors.fill: parent
        model: stringList //the internal QVariantList
        delegate: Rectangle {
          width: 50
          height: 50
          color: "green"
          border.color: "black"
          Text {
            text: modelData //role to get data from internal model
          }
        }
      }
    }
}
于 2013-01-02T08:44:32.000 に答える