Auf dieser Seite

Synchronizer QML Type

Synchronisiert Werte zwischen zwei oder mehr Eigenschaften. Mehr...

Import Statement: import Qt.labs.synchronizer
Since: Qt 6.10

Eigenschaften

Signale

Ausführliche Beschreibung

Ein Synchronizer-Objekt verknüpft zwei oder mehr Eigenschaften miteinander, sodass eine Änderung an einer dieser Eigenschaften automatisch alle anderen aktualisiert. Dabei werden keine der Verknüpfungen der Eigenschaften unterbrochen. Sie können den Synchronizer verwenden, wenn die Richtung des Datenflusses zwischen zwei Eigenschaften nicht vorgegeben ist. Beispielsweise kann ein „ TextInput “ mit einem Modellwert initialisiert werden, sollte aber nach Abschluss der Bearbeitung auch den Modellwert aktualisieren.

Hinweis: Die von „ Qt Quick “ und „ Qt Quick Controls “ bereitgestellten Eingabeelemente lösen dieses Problem, indem sie Signale für Benutzerinteraktionen getrennt von Signalen für Wertänderungen bereitstellen und die Wertzuweisungen im C++-Code verbergen. Für deren interne Funktionsweise benötigen Sie den Synchronizer nicht. Er kann jedoch dennoch nützlich sein, wenn Sie ein Steuerelement mit einem Modell verbinden.

Betrachten Sie das folgende Beispiel.

Ohne Synchronizer

// MyCustomTextInput.qml
Item {
    property string text
    function append(characters: string) { text += characters }
    [...]
}

Man könnte versucht sein, die Eigenschaft „ text “ aus einem Modell zu füllen und das Modell zu aktualisieren, sobald das Signal „ textChanged “ empfangen wird.

// Does not work!
Item {
    id: root
    property string model: "lorem ipsum"
    MyCustomTextInput {
        text: root.model
        onTextChanged: root.model = text
    }
}

Dies funktioniert jedoch nicht. Wenn die Funktion „ append “ aufgerufen wird, wird die Eigenschaft „ text “ geändert, wodurch die Bindung, die sie anhand der Eigenschaft „ model “ aktualisiert, unterbrochen wird. Beim nächsten eigenständigen Aktualisieren von „ model “ wird „ text “ nicht mehr aktualisiert.

Um dieses Problem zu beheben, können Sie die Bindung vollständig weglassen und beide Eigenschaften ausschließlich über Signale aktualisieren. Auf diese Weise müssten Sie jedoch auf den Komfort von Bindungen verzichten.

Alternativ können Sie den Synchronizer verwenden.

Mit „Synchronizer“

Item {
    id: root
    property string model: "lorem ipsum"
    MyCustomTextInput {
        Synchronizer on text {
            property alias source: root.model
        }
    }
}

stellt der Synchronizer sicher, dass immer dann, wenn sich entweder das Modell oder der Text ändert, auch die andere Eigenschaft aktualisiert wird.

Sie können die zu synchronisierenden Eigenschaften auf verschiedene Arten angeben:

  • Mithilfe der Syntax „ on “
  • Durch das Ausfüllen der Eigenschaften „ sourceObject “ und „ sourceProperty “
  • Festlegen der Eigenschaften „ targetObject “ und „ targetProperty “
  • Erstellen von Aliasen im Geltungsbereich des Synchronisierers

Das folgende Beispiel synchronisiert vier verschiedene Eigenschaften und nutzt dabei alle verfügbaren Optionen:

Item {
    id: root
    property string model: "lorem ipsum"

    MyCustomTextInput {
        Synchronizer on text {
            sourceObject: other
            sourceProperty: "text"

            targetObject: root.children[0]
            targetProperty: "objectName"

            property alias source: root.model
            property alias another: root.objectName
        }
    }

    MyCustomTextInput {
        id: other
    }
}

Optional führt der Synchronizer eine anfängliche Synchronisierung durch:

  • Wenn einer der Aliase „ source “ heißt, wird dieser zur Initialisierung der anderen Eigenschaften verwendet.
  • Andernfalls, wenn die den Aliasen „ sourceObject “ und „ sourceProperty “ zugewiesenen Werte eine Eigenschaft bezeichnen, wird diese Eigenschaft als Quelle für die anfängliche Synchronisierung verwendet.
  • Andernfalls, wenn die Syntax „ on “ verwendet wird, dient die Eigenschaft, auf der der Synchronizer auf diese Weise erstellt wurde, als Quelle für die anfängliche Synchronisierung.
  • Andernfalls wird keine anfängliche Synchronisierung durchgeführt. Erst wenn sich eine der Eigenschaften ändert, werden die anderen aktualisiert.

Der Synchronizer führt automatisch eine Entprellung durch. Während er unter Verwendung eines bestimmten Werts als Quelle synchronisiert, akzeptiert er keine weiteren Aktualisierungen von einer der Eigenschaften, die als Ziel der Aktualisierung vorgesehen sind. Ein solches Verhalten würde andernfalls leicht zu endlosen Aktualisierungsschleifen führen. Der Synchronizer verwendet das Signal „ valueBounced “, um über diesen Zustand zu informieren. Darüber hinaus erkennt er Eigenschaften, die eine Aktualisierung stillschweigend ablehnen, und sendet für diese das Signal „ valueIgnored “. „Stillschweigend“ bedeutet in diesem Zusammenhang, dass nach dem Aufruf des Setters für die jeweilige Eigenschaft kein Änderungssignal erfolgt.

Wenn die zu synchronisierenden Eigenschaften unterschiedliche Typen haben, werden die üblichen QML-Typumwandlungen angewendet.

Hinweis: Es ist nicht möglich, einen Alias für eine Eigenschaft eines Singletons zu erstellen. Wenn Sie „Synchronizer“ zusammen mit Singletons verwenden, nutzen Sie „ sourceObject “ und „ sourceProperty “ sowie die entsprechenden Zieleigenschaften.

Eigenschaftsdokumentation

sourceObject : QtObject

Diese Eigenschaft enthält den Teil „sourceObject“ des Paares „sourceObject/sourceProperty “, das zusammen eine der Eigenschaften angibt, die Synchronizer synchronisieren wird.

sourceProperty : string

Diese `sourceProperty` enthält den `sourceProperty`-Teil des Paares ` sourceObject`/`sourceProperty`, das zusammen eine der Eigenschaften angibt, die der Synchronizer synchronisieren wird.

targetObject : QtObject

Diese Eigenschaft enthält den Teil „targetObject“ des Paares „targetObject/targetProperty “, das zusammen eine der Eigenschaften angibt, die Synchronizer synchronisieren wird.

targetProperty : string

Diese `targetProperty` enthält den `targetProperty`-Teil des Paares ` targetObject`/`targetProperty`, mit dem gemeinsam eine der Eigenschaften festgelegt werden kann, die der Synchronizer synchronisieren soll.

Signal-Dokumentation

valueBounced(QtObject object, string property)

Dieses Signal wird ausgegeben, wenn die „ property “ des „ object “ einen Versuch, ihren Wert im Rahmen der Synchronisation festzulegen, abgelehnt und als Antwort einen anderen Wert zurückgegeben hat. Solche „Bounced Values“ werden ignoriert und lösen keine weitere Synchronisationsrunde aus.

Hinweis: Der entsprechende Handler ist „ onValueBounced “.

valueIgnored(QtObject object, string property)

Dieses Signal wird ausgelöst, wenn „ property “ des „ object “ im Rahmen der Synchronisation nicht auf einen Versuch reagiert hat, seinen Wert festzulegen.

Hinweis: Der entsprechende Handler ist „ onValueIgnored “.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.