Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Connect Verbindung zu QML Item
QtWS25 Last Chance

Connect Verbindung zu QML Item

Scheduled Pinned Locked Moved Solved German
3 Posts 2 Posters 809 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Throndar
    wrote on last edited by
    #1

    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

    J.HilkJ 1 Reply Last reply
    0
    • T Throndar

      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

      J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #2

      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);
      }
      

      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      T 1 Reply Last reply
      2
      • J.HilkJ J.Hilk

        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);
        }
        
        T Offline
        T Offline
        Throndar
        wrote on last edited by
        #3

        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

        1 Reply Last reply
        1

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved