Timer
是 QML 中用于定时执行操作的组件,可以实现延迟执行和周期性执行功能。
基本用法
qml
import QtQuick 2.15Timer {interval: 1000 // 1秒running: truerepeat: trueonTriggered: console.log("Timer triggered")
}
主要属性
属性 | 类型 | 描述 | 默认值 |
---|---|---|---|
interval | int | 时间间隔(毫秒) | 1000 |
running | bool | 是否运行 | false |
repeat | bool | 是否重复触发 | false |
triggeredOnStart | bool | 启动时立即触发 | false |
方法
方法 | 参数 | 描述 |
---|---|---|
start() | - | 启动定时器 |
stop() | - | 停止定时器 |
restart() | - | 重新启动定时器 |
信号
信号 | 描述 |
---|---|
triggered() | 定时器触发时发出 |
使用示例
1. 一次性定时器
qml
Timer {id: delayTimerinterval: 3000onTriggered: console.log("3秒后执行")
}// 启动定时器
Component.onCompleted: delayTimer.start()
2. 周期性定时器
qml
Timer {id: refreshTimerinterval: 5000repeat: truerunning: trueonTriggered: {console.log("每5秒刷新数据")refreshData()}
}
3. 动画定时器
qml
Rectangle {id: boxwidth: 50; height: 50color: "red"Timer {interval: 1000repeat: truerunning: trueonTriggered: box.color = box.color === "red" ? "blue" : "red"}
}
4. 倒计时实现
qml
property int countdown: 10Timer {id: countdownTimerinterval: 1000repeat: truerunning: trueonTriggered: {countdown--if (countdown <= 0) {stop()console.log("倒计时结束")}}
}
高级用法
1. 动态调整间隔
qml
Timer {id: dynamicTimerrunning: truerepeat: trueproperty int speed: 1000onTriggered: {console.log("触发")interval = Math.max(100, speed) // 防止间隔过小}
}// 调整速度
Slider {from: 100to: 2000onValueChanged: dynamicTimer.speed = value
}
2. 多个定时器协同
qml
Timer {id: timer1interval: 1000onTriggered: {console.log("Timer1 触发")timer2.start()}
}Timer {id: timer2interval: 500onTriggered: console.log("Timer2 触发")
}
3. 替代 JavaScript 的 setTimeout/setInterval
qml
function delayedCall(delay, callback) {var timer = Qt.createQmlObject(`import QtQuick 2.15Timer {interval: ${delay}running: trueonTriggered: {${callback}()destroy()}}`, parent);
}
注意事项
-
最小间隔取决于系统性能,通常不低于16ms(约60fps)
-
长时间运行的定时器应考虑暂停机制
-
界面隐藏时定时器仍会运行(除非手动停止)
-
高精度定时需求应考虑使用
Animation
组件 -
移动设备上应注意定时器的电量消耗
性能优化建议
-
避免创建过多定时器
-
不使用的定时器应及时停止
-
高频率定时器优先考虑
AnimationTimer
-
界面不可见时暂停非必要定时器
-
多个相同间隔的定时操作可以合并处理