我有一个Qt模型很可能是QAbstractListModel
。每个“行”代表我存储在QList
中的对象。我在QML
的{{1}}中显示了此内容。但是,每个对象都有一个恰好是字符串数组的属性。我想在显示该行的委托中将其显示为ListView
。但我不知道如何将该模型(对象的字符串数组属性)公开给ListView
。我无法通过数据函数公开它,因为模型是QML
,不能是QObjects
。我想过要使用QVariants
,但我仍然不知道如何为QAbstractItemModel
获取模型。如果重要,我正在使用ListView
5.0.0版本。
答案 0 :(得分:5)
您可以从主 QAbstractListModel 返回 QVariantList ,然后可以将其作为模型分配给您在内部的 ListView 代表。我添加了一个小例子,它有一个非常简单的一行模型,内部模型作为例子。
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
}
}
}
}
}