Help me understand Qt.quit()

• červenec 18, 2018 - 03:31

The attached plugin code has the following onRun block:

    onRun: {
        console.log("flag 1");
 
        if (true) {
            console.log("flag 2");
            Qt.quit();
            console.log("flag 3");
        }
 
        console.log("flag 4");
        applyToNotesInSelection(
            function(note) {
                note.color = "orange";
            }
        );
        console.log("flag 5");
 
        Qt.quit();
    }

As I would expect, flags 1 and 2 print, and flags 3-5 don't. But I don't understand why applyToNotesInSelection is executed, coloring any selected notes orange.

Could someone explain what's happening here?

Příloha Velikost
quitTest.qml 2.97 KB

Poznámky

I'll make an attempt to clarify. The main reason for this behavior is that a QML plugin is run on top of the Qt Event(loop) system.

See http://doc.qt.io/qt-5/qml-qtqml-qt.html#quit-method and the related signal description. When you call Qt.quit() you're not actually quitting the execution of your script. You are sending out a signal saying that you would like to stop executing the script and the QmlEngine running you should stop you.
So you place that signal (event) onto the eventlist to be processed by the QmlEngine, but you may still be further executing in your script.

At a later point in time, control is switched away from your script and to the next thread; eventually the QmlEngine will be swapped in.
It is only now that it can start processing its Eventlist; and only once it reaches the quit-event you've sent out in that list, will it actually terminate your script; thus preventing further execution.

Stále ještě máte nějaké nezodpovězené otázky? Nejprve se, prosím, přihlašte, abyste mohl položit svoji otázku.