不同的人,适合的ListView QML [英] Different delegates for QML ListView
问题描述
我想知道是否可以使用(几个)代表不同的QML 的ListView
。
I would like to know if it's possible to use (several) different delegates for a QML ListView
.
根据在的ListView
模型中的各个对象,我想用不同的代表以可视化的对象。
Depending on the individual object in the ListView
model, I would like to visualize the objects with different delegates.
这件code的解释我想实现什么:
This piece of code explains what I want to achieve:
main.qml
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
ApplicationWindow {
title: qsTr("Hello World")
width: 640
height: 480
visible: true
ListModel {
id: contactsModel
ListElement {
name: "Bill Smith"
position: "Engineer"
}
ListElement {
name: "John Brown"
position: "Engineer"
}
ListElement {
name: "Sam Wise"
position: "Manager"
}
}
ListView {
id: contactsView
anchors.left: parent.left
anchors.top: parent.top
width: parent.width
height: parent.height
orientation: Qt.Vertical
spacing: 10
model: contactsModel
delegate: {
if (position == "Engineer") return Employee; //<--- depending on condition, load Contact{}
else if (position == "Manager") return Manager; //<--- depending on condition, load Person{}
}
}
}
Employee.qml (一个可能的分量,我想作为一个代表使用)
Employee.qml (One possible Component which I would like to use as a delegate)
import QtQuick 2.4
Rectangle{
width: 200
height: 50
color: ListView.isCurrentItem ? "#003366" : "#585858"
border.color: "gray"
border.width: 1
Text{
anchors.centerIn: parent
color: "white"
text: name
}
}
Manager.qml (其它组件,我想作为一个代表使用)
Manager.qml (other Component I would like to use as a delegate)
import QtQuick 2.4
Rectangle{
width: 200
height: 50
color: "red"
border.color: "blue"
border.width: 1
Text{
anchors.centerIn: parent
color: "white"
text: name
}
}
我想AP preciate任何意见!
谢谢!
I would appreciate any advice! Thanks!
推荐答案
我相信这将是更好地执行一个基本代表了所有类型的位置,加载的具体实施
根据位置
或使用任何其他数据属性装载机
I believe it would be better to implement one base delegate for all kind of position
which loads concrete implementation depending on position
or any other data properties using Loader
BaseDelegate {
property var position
Loader {
sourceComponent: {
switch(position) {
case "Engineer": return engineerDelegate
}
}
}
Component {
id: engineerDelegate
Rectangle {
Text { }
}
}
}
这篇关于不同的人,适合的ListView QML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!