我有一个 Qt 模型,它很可能是一个QAbstractListModel
. 每个“行”代表我存储在QList
. 我QML
在ListView
. 但是,每个对象都有一个属性,它恰好是一个字符串数组。我想将此显示为ListView
显示该行的委托中的 a 。但我不知道如何将该模型(对于对象的字符串数组属性)公开到QML
. 我不能通过 data 函数公开它,因为 Models 是QObjects
,而不能是QVariants
。我想QAbstractItemModel
改用,但我仍然不知道如何为我的ListView
. 万一这很重要,我使用的是Qt
5.0.0 版本。
问问题
2300 次
1 回答
6
您可以从主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
}
}
}
}
}
于 2013-01-02T08:44:32.000 回答