Connect Verbindung zu QML Item



  • Hallo,

    ich bin (mal wieder) über etwas gestolpert wo mir die Doku nicht wirklich weiter hilft oder finde nicht die richtige Stelle zum suchen.

    Ich habe (mit der Hilfe des Forum hier) soweit gebracht das ich eine eintreffende Nachricht von einem UdpSlot verarbeitet, in Json umwandle und den String anschließend an eine "ClientView" Klasse übergebe (bei Änderung wird per Signal / Slot in der ClientView die Methode "setText" mit übergebenem String (mit dem JSON) aufgerufen und ein String in der Klasse mit der neuen JSON gefüllt.

    Soweit so gut, jetzt kann ich per Mausklick in meiner Oberfläche eine Funktion "fillJsonModel()" aufrufen die den String aus der ClientView in eine Tabelle überträgt. Auch das funktioniert super.

    Jetzt wollte ich im nächsten Schritt dieses ausführen der Funktion an das Signal "textChanged()" anhängen was ich beim ändern des Textes der Funktion emitte.

    Nur habe ich ein Problem an der Stelle mit dem Verständnis. Bisher habe ich immer an der Stelle wo die jeweiligen Objekte existiert haben per connect von der Signalquelle (Objekt) das Signal verbunden mit dem Empfänger (Objekt) dem Slot (soll ausgeführt werden) verbunden. Jetzt gibt es bei der QML Datei die die Funktion beinhaltet die ich aufrufen möchte kein Objekt. Wie drücke ich aus das das Signal aus meiner "ClientView"-Klasse auf die Funktion "fillJsonModel()" der QML-Datei zugreifen soll.

    Vielleicht hat ja jemand eine Idee wo ich da ansetzen könnte.

    Mit freundlichen Grüßen

    Marco


  • Moderators

    Hallo @Throndar

    So ganz ohne Code ist es ein wenig schwer nachzuvollziehen, was genau du eigendlich machen willst.

    Deswegen halte ich mich mal allgemein

    In QML das gegenstück zu QObject::connect ist das Connections element.
    http://doc.qt.io/qt-5/qtqml-syntax-signals.html#using-the-connections-type

    Ist ziehmlich mächtig, schreibt sich und verhält sich aber durchaus anders als als das normale QObject connect. Ich würde empfehlen den Artikel einfach mal durchlesen.

    Damit kannst du dann ganz einfach auch Signale aus deiner cpp classe die du Instanziert oder als context property gesetzt hast mit functionen verkünpfen.

    Prinzipiell gillt aber folgendes zu beachten. als Signal gekennzeichete Funktionen haben in QML immer das prefix on

    Z.b
    signals:
    void textChanged(const QString &text);

    Kann dann in qml folgenderweise zugegriffen werden:

    Connections{
          target: MyCppClassObject
          onTextChanged: console.log(text);
    }
    


  • Hallo @J.Hilk ,

    ich kann wieder mal nur "Danke vielmals" sagen. Gestern habe ich geschlagene 2 Stunden getestet und gebaut ohne Ergebnis.

    Die Connection Klasse hatte ich zwar gefunden, nur hatte die Referenz mir da irgendwie nicht weiter geholfen (http://doc.qt.io/qt-5/qml-qtqml-connections.html)

    Mit deinem Beispiel war auf einmal alles klar :)

    Vielen Dank, du hast mir wieder sehr geholfen!

    Gruß

    Marco


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.