我无法使用部分实现listview。我已成功重复了Qt
文档中的示例,但使用了ListModel
可以正常使用,但不是var
。
如何使用示例:
ListView {
width: 100
height: 100
id: listview
model: ListModel {
id: animalsModel
ListElement { name: "Ant"; size: "Tiny" }
ListElement { name: "Flea"; size: "Tiny" }
ListElement { name: "Parrot"; size: "Small" }
ListElement { name: "Guinea pig"; size: "Small" }
ListElement { name: "Rat"; size: "Small" }
ListElement { name: "Butterfly"; size: "Small" }
ListElement { name: "Dog"; size: "Medium" }
ListElement { name: "Cat"; size: "Medium" }
ListElement { name: "Pony"; size: "Medium" }
ListElement { name: "Koala"; size: "Medium" }
ListElement { name: "Horse"; size: "Large" }
ListElement { name: "Tiger"; size: "Large" }
ListElement { name: "Giraffe"; size: "Large" }
ListElement { name: "Elephant"; size: "Huge" }
ListElement { name: "Whale"; size: "Huge" }
}
delegate: Text { text: name; font.pixelSize: 18 }
section.property: "size"
section.criteria: ViewSection.FullString
section.delegate: Component {
id: sectionHeading
Rectangle {
width: container.width
height: childrenRect.height
color: "lightsteelblue"
Text {
text: section
font.bold: true
font.pixelSize: 20
}
}
}
}
但是,当我尝试使用代码中的某些模型时(在我的情况下,它是来自QVariant
的{{1}}),它根本不起作用:
PyQt5
我在这里选择ListView {
width: 100
height: 100
id: listview
property var m: [
{
name: "Animal",
size: "Big"
},
{
name: "Dog",
size: "Small"
},
{
name: "Cat",
size: "Small"
}
]
model: m
delegate: Text { text: modelData.name; font.pixelSize: 18 }
section.property: "modelData.size"
section.criteria: ViewSection.FullString
section.delegate: Component {
id: sectionHeading
Rectangle {
width: container.width
height: childrenRect.height
color: "lightsteelblue"
Text {
text: section
font.bold: true
font.pixelSize: 20
}
}
}
}
的原因是因为没有任何其他方法可以从Python接收模型,因此需要包含来自var
的任何list
或map
为python
。
答案 0 :(得分:2)
来自Qt文档:
型号:型号
This property holds the model providing data for the list.
The model provides the set of data that is used to create the items in the view. Models can be created directly in QML using ListModel, XmlListModel or VisualItemModel, or provided by C++ model classes. If a C++ model class is used, it must be a subclass of QAbstractItemModel or a simple list.
所以你不能提供一个数组作为模型,它应该是上面的一个对象。 您可以创建此类模型并从Python代码访问它以添加/删除项目。
ListView {
width: 100
height: 100
id: listview
delegate: Text { text: name; font.pixelSize: 18 }
model: ListModel { id: listModel }
section.property: "size"
section.criteria: ViewSection.FullString
section.delegate: Component {
id: sectionHeading
Rectangle {
width: container.width
height: childrenRect.height
color: "lightsteelblue"
Text {
text: section
font.bold: true
font.pixelSize: 20
}
}
}
function callFromPython {
listModel.append({name: "Animal",size: "Big"});
listModel.append({name: "Dog",size: "Small"});
listModel.append({name: "Cat",size: "Small"});
}
}