Wie verhindern Sie, dass die zweite Seite in einem PageStack ausgeführt wird?

Wie verhindern Sie, dass die zweite Seite in einem PageStack ausgeführt wird?

Vielleicht übersehe ich hier etwas, aber ich bin nicht sicher, warum der Code ausgeführt wird, bevor Seite 2 geladen werden soll.

http://pastebin.ubuntu.com/8068379/

Und gibt es eine Möglichkeit, zu verhindern, dass die Funktionen und der Code auf Seite 2 ausgeführt werden, bevor die Schaltfläche gedrückt wird?

Antwort1

Component.onCompletedwird ausgeführt, sobald der Interpreter die QML-Datei gelesen und in Objekte zerlegt hat. Ihr Objekt „Seite 2“ wird zu diesem Zeitpunkt erstellt, aber es ist visible: falsebereits vorhanden, sodass Sie es nicht sehen können. Dies hindert den onCompletedCode jedoch nicht daran, ausgeführt zu werden.

Ich kenne drei Möglichkeiten, Code nur auszuführen, wenn die Seite in den Stapel geschoben wird:

  1. Erstellen Sie eine benutzerdefinierte Funktion, die pageStack.push()jeden anderen Code aufruft und auslöst, den Sie ausführen möchten.

  2. Verschieben Sie den Code vom onCompletedHandler von Seite 2 zum onVisibleChangedHandler. Beachten Sie, dass dieser sowohl aufgerufen wird, wenn die Seite gepusht als auch vom Stapel genommen wird. Überprüfen Sie den Wert von , visibleum zu sehen, was passiert.

  3. Verschieben Sie das Objekt der Seite 2 in eine separate Datei, beispielsweise „page2.qml“, und ändern Sie den Push-Aufruf in pageStack.push(Qt.resolvedUrl("page2.qml")). Dadurch wird bei jedem Push auf den Stapel ein neues Objekt der Seite 2 erstellt. Dies kann Ihren Wünschen entsprechen, muss es aber nicht.

Beachten Sie, dass alle drei den Code jedes Mal aufrufen, wenn Seite 2 in den Stapel verschoben wird. Wenn Sie möchten, dass er nur beim ersten Mal aufgerufen wird, müssen Sie dies selbst im Auge behalten. Weitere Informationen zur Interaktion der Objekterstellung mit dem Seitenstapel finden Sie unterdiese Antwort.

verwandte Informationen