Ответ 1
Как было предложено в комментариях к вашему вопросу, компонент Timer является хорошим решением.
function Timer() {
return Qt.createQmlObject("import QtQuick 2.0; Timer {}", root);
}
timer = new Timer();
timer.interval = 1000;
timer.repeat = true;
timer.triggered.connect(function () {
print("I'm triggered once every second");
})
timer.start();
Выше было бы так, как я его сейчас использую, и вот как я мог бы применить этот пример в вашем вопросе.
function delay(delayTime) {
timer = new Timer();
timer.interval = delayTime;
timer.repeat = false;
timer.start();
}
(что ничего не делает, читайте дальше)
Хотя точный способ, которым вы его реализуете, предполагает, что вы ищете его для блокировки до следующей строки вашей программы. Но это не очень хороший способ сделать это, так как это также блокирует все остальное в вашей программе, поскольку JavaScript работает только в одном потоке выполнения.
Альтернативой является передача обратного вызова.
function delay(delayTime, cb) {
timer = new Timer();
timer.interval = delayTime;
timer.repeat = false;
timer.triggered.connect(cb);
timer.start();
}
Это позволит вам использовать его как таковое.
delay(1000, function() {
print("I am called one second after I was started.");
});
Надеюсь, что это поможет!
Изменить: Вышеупомянутое предполагает, что вы работаете в отдельном файле JavaScript, который позже импортируется в ваш файл QML. Чтобы сделать эквивалент в файле QML напрямую, вы можете сделать это.
import QtQuick 2.0
Rectangle {
width: 800
height: 600
color: "brown"
Timer {
id: timer
}
function delay(delayTime, cb) {
timer.interval = delayTime;
timer.repeat = false;
timer.triggered.connect(cb);
timer.start();
}
Rectangle {
id: rectangle
color: "yellow"
anchors.fill: parent
anchors.margins: 100
opacity: 0
Behavior on opacity {
NumberAnimation {
duration: 500
}
}
}
Component.onCompleted: {
print("I'm printed right away..")
delay(1000, function() {
print("And I'm printed after 1 second!")
rectangle.opacity = 1
})
}
}
Я не уверен, что это решение вашей реальной проблемы; для задержки анимации вы можете использовать PauseAnimation.