2016-11-03 4 views
1

Ich kann keine Möglichkeit finden, von einer qml-Datei zur anderen zu kommunizieren. Ich weiß, dass es viele Möglichkeiten gibt, Signale von qml an C++ - Slots und umgekehrt zu senden, aber alle meine Nachforschungen über Signale zwischen zwei verschiedenen qml-Dateien sind fehlgeschlagen. Also ich würde mich freuen wenn mir jemand sagen kann, wie ich dieses Problem lösen muss.So senden Sie ein Signal von einem qml zu einem anderen

Zunächst ein wenig abstrahierten Beispiel das Problem in einer besseren Art und Weise zu verstehen ...

Die erste QML in den Wurzeln sieht wie folgt aus:

//MyQML1.qml 
Rectangle 
{  
    id: idMyRec1 
    signal mySignalFromQML1() 

    Button 
    { 
     id: idMyButton1 
     onClicked: 
     { 
      idMyRec1.mySignalFromQML1();  //to send the signal 
     } 
    } 
} 

Die zweite man sieht wie folgt aus:

//MyQML2.qml 
Rectangle 
{ 
    id: idMyRec2 

    Text{ 
     id: idMyText2 
     text: "Hello World!" 

     onMySignalFromQML1:  //to receive the signal from the other qml 
     {     
      idMyText2.text = "Good Bye World!"; 
     } 
     } 
} 

Also dieser Button sollte den Text in meinem 2. QML zu "Good Bye World!" wenn geklickt wird ... aber das funktioniert nicht ... gibt es andere Möglichkeiten, Signale von QML an eine andere QML zu senden ?! Oder mache ich etwas falsch?

Antwort

2

Sie kommunizieren nicht zwischen QML-Dateien, die QML-Datei ist nur ein Prototyp, Sie kommunizieren zwischen den Objektinstanzen.

// Rect1.qml 
    Rectangle { 
    id: rect1 
    signal mySignal 
    Button { 
     onClicked: rect1.mySignal() 
    } 
    } 

    // Rect2.qml 
    Rectangle { // Rect1.qml 
    property alias text: txt.text 
    Text { 
     id: txt 
    } 
    } 

Und dann die Objekte erstellen:

Rect1 { 
    onMySignal: r2.text = "Goodbye world!" 
} 

Rect2 { 
    id: r2 
} 

Es gibt andere Möglichkeiten, eine Verbindung herzustellen, jedoch passieren Verbindungen zwischen Objektinstanzen, nicht qml Dateien. Die Objekte müssen sich nicht in derselben qml-Datei befinden, aber für einfache Dinge sind sie anfangs selten in verschiedenen Dateien.

+0

Sorry, aber das hat bei mir bisher nicht funktioniert ... Ich habe dein Beispiel in einem löcheren neuen Projekt versucht, um es zu testen, aber mein Compiler kann nicht mit diesen "Objekten" (?) Umgehen, die du Rect1 {. ..} und Rect2 {...} Was mache ich falsch? Sorry ... ich bin neu in der qml Programmierung ... aber danke für deine Hilfe! –

+0

Sie müssen 'Rect1.qml' und' Rect2.qml' als Teil Ihrer Projekte haben. Dann können Sie sie als QML-Typen verwenden. Sie müssen wirklich einen Schritt zurück gehen und QML von Grund auf lernen. Ein guter Anfang ist https://qmlbook.github.io/ – dtech

+0

Ahh, ok ... danke! Ich Idiot! Ich habe das schon oft gemacht, aber vergessen, meine qml-Dateien in das neue Projekt umzubenennen ... Aber du hast Recht ... Ich muss mehr über QML lernen ... weit weg! Danke für den Link! –

Verwandte Themen