QML 中的 Timer
组件用于在指定时间间隔后触发事件,支持单次或重复执行。以下是它的核心用法和示例:
1. 基本属性
interval
: 时间间隔(毫秒),默认1000
(1秒)repeat
: 是否重复执行(true
/false
),默认false
running
: 是否自动启动(true
/false
),默认false
triggeredOnStart
: 启动时立即触发一次(true
/false
),默认false
2. 基本用法示例
import QtQuick 2.15
Item {
Timer {
id: myTimer
interval: 1000 // 1秒触发一次
repeat: true // 重复执行
running: true // 自动启动
onTriggered: {
console.log("Timer triggered at", new Date());
}
}
}
3. 手动控制定时器
通过按钮控制定时器的启动/停止:
Row {
spacing: 10
Button {
text: "Start"
onClicked: myTimer.start()
}
Button {
text: "Stop"
onClicked: myTimer.stop()
}
}
Timer {
id: myTimer
interval: 500
onTriggered: console.log("Tick")
}
4. 单次延迟执行
Timer {
id: delayTimer
interval: 2000
onTriggered: {
console.log("2秒后执行");
}
}
// 启动定时器(例如在组件加载时)
Component.onCompleted: delayTimer.start()
5. 动态修改属性
Timer {
id: dynamicTimer
interval: 1000
running: true
onTriggered: {
interval = Math.random() * 2000; // 动态修改时间间隔
console.log("Next trigger in", interval, "ms");
}
}
6. 与动画结合使用
Rectangle {
width: 100; height: 100
color: "red"
Timer {
interval: 1000
running: true
repeat: true
onTriggered: {
parent.color = Qt.rgba(Math.random(), Math.random(), Math.random(), 1);
}
}
}
7. 常见用途
- 定期更新 UI 数据
- 实现轮询(如检查网络状态)
- 延迟执行操作(如页面跳转)
- 控制动画/效果的节奏
注意事项
- 避免在
onTriggered
中执行耗时操作(可能导致 UI 卡顿)。 - 如果需要在后台线程执行任务,应使用
WorkerScript
而非 Timer。 - 定时器的精度取决于系统负载,不适用于高精度计时场景。
通过灵活组合这些特性,可以轻松实现 QML 中的定时任务需求。