QML定时器Timer和线程任务WorkerScript
定时器 Timer
- 属性
interval
: 事件间隔毫秒repeat
: 多次执行,默认只执行一次running
: 定时器启动triggeredOnStart
: 定时器启动时立刻触发一次事件
- 信号
triggered()
: 定时时间到,触发此信号
- 方法
restart()
: 重启定时器start()
: 启动定时器stop()
: 停止定时器
- 定时器使用示例
-
import QtQuick 2.12import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Text{id: text1x: parent.width - 220y: parent.height - 30text:"time"MouseArea{anchors.fill: parentonClicked: {timer1.running = !timer1.running}}}Timer{id: timer1// 间隔事件-毫秒interval: 1000// 定时器启动后立刻触发一次triggeredOnStart: true// 触发多次repeat: true// 定时器启动running: true// 接收触发信号onTriggered: {text1.text = Date().toString()}}}
-
线程任务 WorkerScript
WorkerScript
是QML提供的一个轻量级线程机制,用于在后台线程中执行JavaScript
代码。- 它适合简单的任务,但不适用于复杂的多线程需求。
- 属性
source
: 指定多线程访问的脚本
- 信号
message
: 线程处理脚本中sendMessage发出消息后,此信号触发
- 方法
sendMessage
: 发送消息到另一个线程
- 线程使用示例
-
import QtQuick 2.12import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle{width: 280height: 200color: "#AAAAAA"Text{id: mytexttext: "click"}WorkerScript{id: mywork// 多线程访问的脚本source: "myscript.js"// 接收线程处理后的数据onMessage: (msg)=>{print("onMessage: " + msg.reply)}}MouseArea{anchors.fill: parentonClicked: {// 给线程发送数据mywork.sendMessage({'name':'testname',"datas":[3, 5, 7, 9]})}}}}
-
- 线程脚本
myscript.js
-
// 接收主线程发送的数据WorkerScript.onMessage = function(msg){var vremsg = msg.name + ": "for(i = 0; i < msg.datas.length; i++){vremsg += msg.datas[i] + "|"}print(vremsg)WorkerScript.sendMessage({'reply': vremsg})}
-