Ich möchte eine BusyIndicator
anzeigen, während ein langer Prozess läuft. Das Problem ist, dass es nicht angezeigt wird, wenn ich es ausführen lasse, und es danach anzeigt, wenn der Prozess abgeschlossen ist. Nach der Dokumentation sollteBusyIndicator wird nicht angezeigt
Die Besetztanzeige verwendet werden, Aktivität, um anzuzeigen, während die Inhalte oder die Benutzeroberfläche wird geladen wartet blockiert für eine Ressource verfügbar wird.
Ich habe einen minimalen Code erstellt, die
Window {
id: win
width: 300
height: 300
property bool run : false
Rectangle {
anchors.fill: parent
BusyIndicator {
anchors.centerIn: parent
running: run
}
MouseArea {
anchors.fill: parent
onClicked: {
run = true
for(var a=0;a<1000000;a++) { console.log(a) }
run = false
}
}
}
}
So auf dem ursprünglichen Code basiert, wenn die Rectangle
geklickt wird ich die BusyIndicator
für die Zeit, bis die Berechnungen angezeigt werden soll abgeschlossen wird.
Zum Beispiel Zweck Ich habe hier die for-Schleife verwendet. Im aktuellen Szenario rufe ich eine Funktion (die etwa 1000 Zeilen in die Datenbank einfügt) über die ContextProperty
. Aber auch in diesem Fall wird BusyIndicator
nicht angezeigt.
Mache ich es richtig? Oder was wäre der beste Weg, es zu tun?
zu einig. Im aktuellen Szenario habe ich eine C++ Funktion, die onClick aufgerufen wird. Kann dort ein WorkerScript verwendet werden? – astre
Wenn dein Handler in C++ ist, kannst du das leicht mit QThread machen, denke ich. Ans sendet eine Benachrichtigung, wenn eine Berechnung abgeschlossen ist. – folibis
Ok, das wollte ich vermeiden :) Irgendeine Möglichkeit, sowas wie processEvents von QML selbst zu machen? Oder ist es möglich, den BusyIndicator selbst auf einem separaten Thread auszuführen? – astre