我想在
javascript中创建一个延迟函数,它需要一段时间的参数来延迟,所以我可以使用它在QML应用程序中执行
JavaScript行之间引入延迟.它可能看起来像这样:
function delay(delayTime) { // code to create delay }
我需要body的函数delay().请注意,javascript的setTimeout()在QML中不起作用.
解决方法
如您对此问题的意见所建议的,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.