通过一段简单测试代码来验证height和visible对Item的影响
测试代码如下:
import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 Window {
width: 640
height: 480
visible: true
title: "testListView"
ListView {
anchors.fill: parent
model: testmodel
delegate: testDelegate
}
ListModel {
id: testmodel
ListElement {
name: "Apple"
cost: 2.45
mycolor: "#00B000"
visible: true
height: 10
}
ListElement {
name: "Orange"
cost: 3.25
mycolor: "steelblue"
visible: false
height: 20
}
ListElement {
name: "Banana"
cost: 1.95
mycolor: "red"
visible: true
height:30
}
ListElement {
name: "Orange"
cost: 3.25
mycolor: "yellow"
visible: false
height: 5
}
ListElement {
name: "Banana"
cost: 1.95
mycolor: "green"
visible: true
height: 20
}
}
Component {
id: testDelegate
Item {
id: name
height: {
console.log(index, model.height)
return model.height
}
width: 100
visible: model.visible
Rectangle{
color:{
console.log(index,model.mycolor)
return model.mycolor
}
anchors.fill: parent
visible: parent
Text { text: model.name }
}
}
} }
第一种情况
多个item,当中某个item设置属性visible为false,然后的所造成的结果,就是listview中该item确实不可见,但是,它却占了位置,属于它的那块位置只是透明了。
效果如下图:
可以很明显的看出当中index为1和3位置的item虽然不可见了,但是位置还在。
第二种情况
多个item,我们把某个item高度设置为0,该item在视觉上不可见,达到隐藏的效果,但是实际该item还存在。(将测试代码中listModel第二个 ListElement 的 height值修改为0,visible修改为true),效果如下图:
以下是console.log(index,height)打印出的值
qml: 0 10
qml: 1 0
qml: 2 30
qml: 3 5
qml: 4 20
第三种情况
item中的子控件可以超出item的大小(多个item,我们将代理中的item的height属性修改为固定值20,把测试代码ListElement 所有item的height属性都设置为20,visible属性都修改为true,将测试代码中listModel第一个 ListElement 的 height值修改为40,第二个ListElement的height值修改为0),效果如下图:
总结结论,如果想设置当中某个item不显示,保留数据或index值不想改变的话就把该item(高度/宽度)调为零,不保留数据,index不固定就在model中remove该item,需要时候在insert。然后item中的子控件可以超出item的大小。
当然,以上的只是小土豆本人的一点浅薄的研究,希望大佬帮忙指正。