我有一个QML ListView,其中委托是连接到设备组件的真实c ++,使用线程和QWidgets
。
但是当我滚动ListView或将委托扩展到程序窗口时 - 不可见的委托被销毁。
我可以做些什么来保存代理人ListModel
?
我的示例代码:
import Qt 4.7
Rectangle {
width: 320; height: 200; color: "white"
Text {
id: debugText
font.pixelSize: 24
color:"blue"
text: "count of created delegates: " + added.toString()
}
property int added: 0
Component {
id: delegate
Item {
id: wrapper
Component.onCompleted: added += 1
width: 180; height: 50
Column {
x: 5; y: 5
Text { text: '<b>Name:</b> ' + name }
Text { text: '<b>Number:</b> ' + number }
}
}
}
ListView {
width: parent.width; height: parent.height
model: contactModel
delegate: delegate
}
ListModel {
id: contactModel
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
}
}
谢谢!我解决了这个问题! 第一种方式 - 我创建了Flickable对象,Column和Repeater,这个解决方案适合我。 第二种方法 - 对于主视图中的多个网格(类似SCADA的程序),我使用QObjectList,其中每个Object都是QObjectList,其中每个对象都是我的DataObject :)
答案 0 :(得分:5)
保持ListView不破坏委托可以做的是为ListView的cacheBuffer
属性分配一个大值(http://doc-snapshot.qt-project.org/4.8/qml- listview.html#cacheBuffer螺旋桨)。这显然是一种黑客而不是推荐的方法。将任何州存储在代表中都是一个坏主意。
您应该做的是在C ++模型中单独管理本机对象,您可以根据需要控制每个对象的生命周期。