QML的等待功能仅在测试用例内起作用吗

时间:2019-03-07 13:52:44

标签: qt qml

我已经编写了这个基本的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:我正在尝试避免使用计时器,因为当代码变得更加复杂并且依赖多个计时器时,它会牺牲大量可读性。

2 个答案:

答案 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之外使用它。您应该改用事件系统或信号/插槽。

使用延迟并不是提高可读性的好方法:如果代码太复杂,则必须对其进行重构并将其拆分为较小的组件。