Nik*_*Nik 1 qt listview qml qtquick2
我有一个ListModel,它存储一个字符串“ cityName”和一个实际值“ TimeZoneOffset”。顾名思义,cityName保存城市名称,TimeZoneOffset保存时间偏移量(距UTC的时间),以分钟为单位。
ListModel {
id: worldCity
ListElement {
cityName: "London"
TimeZoneOffset: 0
}
ListElement {
cityName: "Amsterdam"
TimeZoneOffset: 120
}
}
Run Code Online (Sandbox Code Playgroud)
然后在ListView中使用此模型。ListView具有如下代码示例所示的结构。
ListView {
model: worldCity
currentIndex: -1
delegate: ListItem.Standard {
text: cityName
Label {
text: timeOffSet + currentSystemTime
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我的ListView显示的是修改后的输出,而不是直接输出listModel元素。我需要每分钟更新一次ListView元素,以显示某个城市的当前时间。我计划使用计时器每分钟更新一次。
如何更新每个listView元素?
对我来说,直接更新模型似乎不是正确的选择,这是代码的简化和增强版本,可以正确执行操作:
import QtQuick 2.0
Rectangle {
width: 200;
height: 400;
property real currentTimestamp;
function updateTime () {
var now = new Date ();
currentTimestamp = now.getTime ();
}
Timer {
interval: 60000;
repeat: true;
running: true;
onTriggered: { updateTime (); }
}
ListView {
anchors.fill: parent;
model: ListModel {
ListElement { cityName: "London"; timeOffSet: 0; }
ListElement { cityName: "Amsterdam"; timeOffSet: 120; }
ListElement { cityName: "Paris"; timeOffSet: 60; }
}
delegate: Column {
anchors {
left: parent.left;
right: parent.right;
}
Text {
text: model.cityName;
font.bold: true;
}
Text {
text: Qt.formatTime (new Date (currentTimestamp + (model.timeOffSet * 60000)), "hh:mm A");
}
}
}
Component.onCompleted: { updateTime (); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12945 次 |
| 最近记录: |