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