Qt的文档在这个问题上似乎有点简短,但我正在尝试使用QLists作为ListView的模型 . 问题是,我代表一个层次结构,每当点击一个项目时,模型就会与另一个项目交换,QML从C回调中获取 .
这是表示列表项的对象:
class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ getName WRITE setName)
Q_PROPERTY(QString subtitle READ getSubtitle)
Q_PROPERTY(QList<QObject*> descent READ getChildren NOTIFY childrenUpdated)
...
}
以及我如何在QML中使用它:
ListView {
id: list_view
model: myModel
anchors.fill: parent
delegate: Item {
id: row
height: 50
anchors.left: parent.left
anchors.right: parent.right
MouseArea {
anchors.fill: row
onClicked: {
list_view.model = descent;
}
}
Column {
Text { text: name }
Text { text: subtitle }
}
}
}
“myModel”模型在main中设置,如下所示:
context->setContextProperty("myModel", QVariant::fromValue(folder.getChildren()));
第一次出现ListView时,它使用myModel作为模型,它可以工作 . 但是,每当我点击某个项目时,ListView会创建预期的确切项目数...但它无法读取任何属性!
为什么ListView确切地知道需要创建多少项目,却看不到它们的属性?
1 回答
我相信这是你正在观察的正确行为 . QML知道
QList
中的元素数量,但就查询name
和subtitle
而言,这是不可能的,因为descent
不符合ListView::model
的约束来自ListView::model property的QML文档:
所以在这方面,你要么必须改变
descent
是一个简单的列表,我认为这意味着包含简单的数据,如单个QString
,int
等...或者将其实现为包含QObjects
列表的QAbstractItemModel
.