我已经编写了这个基本的Qml文件,该文件导入了QtTest,但不是测试。
import QtQuick 2.0
import QtQuick.Controls 1.4
import QtTest 1.1
ApplicationWindow {
id: window
width: 400
height: 250
visible: true
menuBar: MenuBar {
Menu{
title: "alpha"
MenuItem{ text: "print after 1 sec"; onTriggered:{printAfterDelay(1000)}}
}
}
Rectangle{
anchors.fill: parent
color: "red"
}
function printAfterDelay(delay){
wait(delay);
console.log("print")
}
}
一旦我运行它,它就会引发错误:ReferenceError: wait is not defined
。
此功能仅在运行实际测试用例时起作用吗,还是我做错了什么?如果仅在测试用例上运行,还有其他替代方法(不包括计时器)吗?
PS:我正在尝试避免使用计时器,因为当代码变得更加复杂并且依赖多个计时器时,它会牺牲大量可读性。
答案 0 :(得分:1)
是的,yarn link
仅用于测试用例,因此仅在内部可见。
... WHERE cond1 OR cond2 OR cond3
但是我不同意使用计时器会降低可读性。看一下这个答案: How to create delay function in QML?
您只能定义一次延迟功能:
+-----+- -+-------+-------+-------+
| ID | .. selected columns .. | cond1 | cond2 | cond3 |
+-----+- -+-------+-------+-------+
| id1 | | true | false | false |
| id2 | | false | true | true |
| id3 | | false | true | false |
| id4 | | true | true | false |
+-----+- -+-------+-------+-------+
,然后您可以使用f.e. lambda:
wait
仅比代码多几个字符。据我所知,Qml中没有更好的解决方案。
答案 1 :(得分:0)
wait()是TestCase QML类型的方法。您不能在TestCase之外使用它。您应该改用事件系统或信号/插槽。
使用延迟并不是提高可读性的好方法:如果代码太复杂,则必须对其进行重构并将其拆分为较小的组件。