gpt4 book ai didi

c++ - 为什么即使我设置了它的 repeat = false,定时器也能工作这么多次?

转载 作者:太空狗 更新时间:2023-10-29 20:10:06 26 4
gpt4 key购买 nike

我想设置一个800ms的延迟时间来运行一个函数,所以我使用了一个定时器来处理它。代码如下。但我发现,第一次运行时,该函数运行正确,它只显示一个 console.log("here is console....."); ,但是当我再次点击它时,它显示 2 个控制台,在第三次点击时,它显示 3 个控制台,依此类推...

我不明白为什么会这样,有 friend 能帮我解释一下吗?

import QtQuick 2.6
import QtQuick.Window 2.2

Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")

MouseArea {
anchors.fill: parent
onClicked: {
delayTimer(800,function(){
console.log("here is console.....");
var t= Math.random();
console.log(t);
})

}
}



Timer{
id:dtimer
}

function delayTimer(delayTime, cb) {
console.log("delayTimer is starting");
dtimer.interval = delayTime;
dtimer.repeat = false;
dtimer.triggered.connect(cb);
dtimer.start();
}
}

点击几次后,当我再次点击它时,输出是:

qml: delayTimer is starting
qml: here is console.....
qml: 0.27777099609375
qml: here is console.....
qml: 0.407012939453125
qml: here is console.....
qml: 0.60552978515625
qml: here is console.....
qml: 0.360107421875
qml: here is console.....
qml: 0.21942138671875
qml: here is console.....
qml: 0.252288818359375
qml: here is console.....
qml: 0.88134765625
qml: here is console.....
qml: 0.63092041015625
qml: here is console.....
qml: 0.5125732421875

最佳答案

每次调用 delayTimer() 时,您都会将信号连接到槽,因此连接会累积,槽会被多次调用。我对qml/js不熟悉,但是触发超时后需要断开槽:

function delayTimer(delayTime, cb) {
console.log("delayTimer is starting");
dtimer.interval = delayTime;
dtimer.repeat = false;
dtimer.triggered.connect(cb);
dtimer.triggered.connect(function(){
dtimer.triggered.disconnect(cb);
});
dtimer.start();
}

关于c++ - 为什么即使我设置了它的 repeat = false,定时器也能工作这么多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com