我有一个 ListView,其模型来自 U1db.Query U1db 的读取和保存操作有效,但当在数据库中插入新项目时,我需要更新 ListView 模型,以显示使用查询检索到的最后内容。我也尝试过使用 ListView and
UbuntuListView`,但我无法解决这个问题。我无法“拉”列表来刷新它,但我收到如下错误:
`Property 'update' of object U1db::Query(0xe097e0) is not a function`
我查看了 sdk 文档,但没有找到任何有用的例子。谢谢您的任何建议!
这里是片段(我省略了一些细节):
//delegate component for the listView
Component {
id: peopleListDelegate
Item {
id: personItem
//draw a rectangle aroun the content to display
Rectangle {
//content omitted
}
// This mouse region covers the entire delegate
MouseArea {
//content omitted
}
Row {
id: topLayout
//display some content to be shown inside the Rectangle
}
}
}
//the listView that show DB Query result
ListView {
id: listView
anchors.fill: parent
model : allPeopleQuery
delegate: peopleListDelegate
highlight: highlightComponent
focus: true
Component{
id: listHeader
Item {
width: parent.width
height: units.gu(10)
Text{
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
text: i18n.tr("<b> Total people found: </b>") + listView.count
}
}
}
header: listHeader
PullToRefresh {
refreshing: listView.model.status === ListModel.Loading
onRefresh: listView.model.update() // HERE THE PROBLEM, (also using reload() doesn't work)
}
}
U1db.Database {
id: mypeopleDb
.....
}
U1db.Index{
database: mypeopleDb
id: all_field_index
expression: .......
}
U1db.Query {
id: allPeopleQuery
index: all_field_index
query: ["*", "*"]
}
答案1
经过几天的尝试,我找到了如何“修复”这个问题。带有 U1db 查询作为“模型”的 ListView 具有内置的模型自动刷新功能(例如:如果您在数据库中添加/删除项目并且查询的结果集发生变化,则模型将被更新)。但是,在 AdaptiveLayout 中使用上述代码,并使用以下语句在页面之间切换:
myAdaptiveLayout.addPageToNextColumn(aPage,Qt.resolvedUrl('AddPerson.qml'))
模型的自动刷新不起作用!
如果您在定义 AdaptiveLayout 的同一个 qml 文件中包含来自文件“AddPerson.qml”的页面代码,则 ListView 模型自动刷新就可以起作用!
笔记:我不知道这个解决方案是一种解决方法还是一个 qml 错误。