私は関数を実行するために800msの遅延時間を設定したいので、タイマを使って処理します。コードは次のようなものです。しかし、私は最初に関数が正しく実行されていることを発見しました。のconsole.log(ここではコンソール.....)を表示するだけです。が表示されますが、もう一度クリックすると2台のコンソールが表示され、3台目のコンソールには3台のコンソールが表示されます。私は繰り返し= falseを設定してもタイマーが何度も働くのはなぜですか?
これはなぜ起こるのですか?数回のクリック後
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
おそらく[Timer.triggeredOnStart](http://doc.qt.io/qt-5/qml-qtqml-timer.html#triggeredOnStart-prop)を 'false'に設定する必要があります。 – folibis
@folibis:いいえ、デフォルトは 'false'です(あなたのリンクを参照してください) – derM