Функция ожидания qml работает только в тестовых примерах - PullRequest
1 голос
/ 07 марта 2019

Я написал этот файл Basic 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 ]

1 голос
/ 07 марта 2019

Вы правы, wait определяется только для тестовых случаев, поэтому он будет виден только внутри

TestCase {

Однако я не согласен с тем, что использование таймеров снизит читабельность.Посмотрите на этот ответ: Как создать функцию задержки в QML?

Вы определяете свою функцию задержки только один раз:

function delay(delayTime, cb) {
    timer = new Timer();
    timer.interval = delayTime;
    timer.repeat = false;
    timer.triggered.connect(cb);
    timer.start();
}

, а затем можете использовать feлямбда:

delay(100, function() {
    console.log("print")
})

Это всего на несколько символов больше, чем ваш код.Насколько мне известно, лучшего решения в Qml нет.

0 голосов
/ 07 марта 2019

wait () - это метод типа TestCase QML.Вы не можете использовать его вне TestCase.Вместо этого вам следует использовать sytem или signal / slots для событий.

Использование задержки не является хорошим ответом для повышения читабельности: если ваш код становится слишком сложным, вы должны реорганизовать его и разделить на более мелкие компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...