2017-06-15 2 views
0

Ich versuche, zwei Dial-Elemente so zu binden, dass, wenn der Dial1-Wert geändert wird, der gleiche Wert in Dial2 widergespiegelt wird, das in einem anderen Qml ist.Bindung von zwei Elementen aus zwei verschiedenen qml-Dateien

QML ist neu für mich und ich weiß nicht viel von dem Aspekt. Aber ich möchte für diese Sache reine QML verwenden und kein C, C++.

//file1.qml 

dial{ 
id: dial1 
} 



//file2.qml 

dial{ 
id: dial2 
} 

Zweitens möchte ich zwei-Wege-Bindung für das gleiche Szenario zu passieren.

+0

Es gibt keine solchen Konzepte - verschiedene Dateien. Die QML-Anwendung ist eine Baumstruktur von QML-Objekten. Wenn Sie also eine qml-Datei haben, die dieses Objekt nicht in der Baumstruktur bedeutet. Es ist nur ein Prototyp, also sollten Sie zuerst eine Instanz dieses Objekts erstellen. Zeigen Sie uns, wie Ihre 2 Objekte und so die Beziehung zwischen ihnen ist. – folibis

+0

Ich weiß nicht genau, was Sie zu erreichen versuchen, aber Sie könnten beide Komponenten in der gleichen Datei (sagen wir main.qml) erstellen. Dann könnten Sie ihre Eigenschaften an dieselbe Eigenschaft binden, die in main.qml erstellt wurde. Alle Änderungen werden sich auf beide Komponenten auswirken. –

+0

@folibis Ich habe '// CustomDial.qml' und dann verwende ich diese Komponente' CustomDial {} 'als ** Objekt an zwei Stellen ** der verschiedenen TAB-Seiten. Ich habe jede separate qml-Datei für jeden Tab. Jetzt möchte ich dieses 'CustomDial Object' verbinden, das sich in zwei verschiedenen Tabs befindet, so dass, wenn man sich ändert, das andere geändert wird. – ryuk

Antwort

0

An einer Stelle werden Sie beide Dateien instanziieren. Nehmen wir an, es ist ein TabView. Dies ist der Punkt, an dem Sie die Verbindung zwischen den beiden Dateien herstellen, indem Sie der TabView eine Eigenschaft hinzufügen, die den gemeinsamen Wert enthält.
Der Vorteil der sharedValue ist, dass die Zeit, in der die beiden Dateien instanziiert werden, unterschiedlich sein kann. Wenn Sie also die Instanz file1 zerstören und die Instanz file2 ein paar Minuten später erstellen, können Sie den Wert noch haben .

TabView { 
    property int sharedValue 
    File1 { 
     id: file1 
    } 
    File2 { 
     id: file2 
    } 
} 

Dann lesen Sie this on bidirectional bindings und binden die beiden freiliegenden Werte der Zifferblätter auf den gemeinsam genutzten Wert. Sie können alternativ die Eigenschaft sharedValue weglassen und die bidirektionale Bindung zwischen den beiden exponierten Werten direkt installieren.

Was notwendig ist, ist natürlich, dass Sie den Wert der Wahl aussetzen, so dass Ihre Dateien würden

Tab { 
    property alias dialValue: dial.value // now you can access the dial's value via this new property. 
    CustomDial { 
     id: dial 
    } 
} 

So lange suchen müssen, wie Sie die Werte in der Bindung nicht verändern, ich empfehlen, zwei Binding -Objekt zu verwenden, um die bidirektionale Bindung zu installieren.

+0

Ihre Erklärung hat mir geholfen, dieses bindende Zwei-Wege-Konzept zu lernen. Ich habe wirklich vergessen, dass ich TabView habe und das hat mich vermasselt. Mach weiter so. Vielen Dank. – ryuk

Verwandte Themen