QML: ausführen von Funktionen, welche in parallelen threads
In meinem code, den ich erschaffe 16x16 Tasten im Zyklus, und dies wenige Sekunden.
onCreateField:
{
for(var i=0;i<fieldWidth;i++)
{
for(var j=0;j<fieldHeight;j++)
{
createButton(i, j);
}
}
}
function createButton(x, y)
{
__buttonX = x;
__buttonY = y;
__component = Qt.createComponent("GameButton.qml");
if(__component != null)
continueButtonCreation();
else
__component.ready.connect(continueButtonCreation);
}
function continueButtonCreation()
{
var button = __component.createObject(field, {"row": __buttonY, "column": __buttonX});
if (button == null) {
//Error Handling
console.log("Error creating object");
return;
}
updateValveState.connect(button.stateUpdated);
button.buttonClicked.connect(buttonClicked);
field.clearField.connect(button.release);
}
Während Funktion, die die Erstellung von Schaltflächen ausgeführt, die app friert ein. Ich will zeigen, loading animation, während diese Funktion ausgeführt wird. Also, wie führen Sie diese Funktion im parallel-thread um zu vermeiden, einfrieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arbeit tun, in threads Sie haben zwei mögliche Ansätze :
Hinweis: Wie in der Dokumentation, gibt es eine Einschränkung allerdings :
Nur sehen, wenn für Ihren Anwendungsfall passt es die Anforderung.
2
. Die Implementierung der Funktionalität, die schwere als C++ - threads. Wenn erforderlich, generieren ein signal, um diesen thread auf die C++ - Seite. Wenn Sie fertig sind, die Daten wieder von C++ auf Qml , wenn erforderlich.
Als Sie können oder möglicherweise nicht haben bestimmt in anderen Beiträgen kann man nicht laden QML Objekte in javascript parallel. Je nach Umständen sollten Sie wahrscheinlich ein GridView mit einem Delegierten, der rendert einen button. Dies ermöglicht es der zugrunde liegende code, um effizient Rendern die Tasten, statt nacheinander erstellen Sie in javascript.
Anderen Optionen nicht blockiert die UI könnte
incubateObject
stattcreateObject