Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Auswahl bzw. Anzeige von Inhalten des TableView in QML
Forum Updated to NodeBB v4.3 + New Features

Auswahl bzw. Anzeige von Inhalten des TableView in QML

Scheduled Pinned Locked Moved Solved German
6 Posts 2 Posters 1.8k 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 auf eine Frage gestoßen bei der ich momentan fest stecke.

    Ich habe eine Tabelle die ich in einem TableView anzeige. Diese wird per Funktion von einem JSON gefüllt.

    Die Tabelle selbst ist nichts besonderes und ich habe auch schon mitbekommen das ich per Event "onClicked" des TableView auf die geclickte Zeile reagieren kann.

    Aktuell versuche ich die eingetragenen Werte in der Tabelle per "onClick" anzuzeigen.

    Genauer gesagt würde ich gerne später beim Clicken auf eine Zeile den Wert der unter der TableViewColumn mit Role 'ipaddress' angegeben ist anzeigen (da ich diesen als Schlüssel für eine QMap nutze).

    Ich habe herausgefunden das ich mir den Index der angeklickten Zeile per "row" ausgeben kann, mehr Möglichkeiten auf den Zugriff habe ich bisher noch nicht gefunden.

    Hat vielleicht jemand einen Tip für mich wie man Werte aus der Tabelle raus bekommt.

    Hier nochmal die (extrem einfache) Tabelle:

    TableView {
            id: view
            anchors.top: controls.bottom
            height: root.height - controls.height
            width: root.width
    
            TableViewColumn {
                role: 'name'
                title: "Servername"
                width: view.width * 0.5
            }
    
            TableViewColumn {
                role: 'ipaddress'
                title: "IP Adresse"
                width: view.width * 0.3
            }
    
            TableViewColumn {
                role: 'port'
                title: "Port"
                width: view.width * 0.19
            }
            onClicked: {
                console.log(row)
            }
    
        }
    

    Mit freundlichen Grüßen

    Marco

    1 Reply Last reply
    0
    • J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #2

      hihi,

      meine Erfahrung mit dem TableView in QML sind begrenzt, aber vom Prinzip her sollte es sich wie beim LiestView verhalten.

      d.h du solltest mit modelData btwmodel.get(index) zugriff auf das item bekommen.

      Mehr Informationen hier:
      http://doc.qt.io/qt-5/qml-qtqml-models-listmodel.html#get-method


      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
      1
      • J.HilkJ J.Hilk

        hihi,

        meine Erfahrung mit dem TableView in QML sind begrenzt, aber vom Prinzip her sollte es sich wie beim LiestView verhalten.

        d.h du solltest mit modelData btwmodel.get(index) zugriff auf das item bekommen.

        Mehr Informationen hier:
        http://doc.qt.io/qt-5/qml-qtqml-models-listmodel.html#get-method

        T Offline
        T Offline
        Throndar
        wrote on last edited by
        #3

        Hallo @J.Hilk,

        danke für die Antwort.

        Mein Problem ist das ich kein ListModel definiert habe. Es gibt nur den TableView den ich gepostet habe der bei Änderungen (z.B. neue Daten kommen an) per Funktion ein Model aus einem QString mit einem JSON Inhalt bekommt).

        function fillJsonModel()
            {
                view.model = JSON.parse(clientView.text)
            }
        

        Ich hatte gehofft das ich irgendwie an die Daten in dem Tableview ran komme. Per Anclicken habe ich ja schon eine Reihe die ich per "row" ziehen kann. Was mich zu der Überlegung bringt ob ich nicht, wenn ich schon nicht an die Tabelle oder die Zellen ran komme nicht auf irgend einem Wege aus der JSON den Datensatz Nummer "row+1" ziehen könnte weil die Tabelle ja aus der JSON gebaut wird und ich darin ja alles hätte.

        Oder bin ich an der Stelle auf dem kompletten Holzweg?

        Gruß

        Marco

        J.HilkJ 1 Reply Last reply
        0
        • T Throndar

          Hallo @J.Hilk,

          danke für die Antwort.

          Mein Problem ist das ich kein ListModel definiert habe. Es gibt nur den TableView den ich gepostet habe der bei Änderungen (z.B. neue Daten kommen an) per Funktion ein Model aus einem QString mit einem JSON Inhalt bekommt).

          function fillJsonModel()
              {
                  view.model = JSON.parse(clientView.text)
              }
          

          Ich hatte gehofft das ich irgendwie an die Daten in dem Tableview ran komme. Per Anclicken habe ich ja schon eine Reihe die ich per "row" ziehen kann. Was mich zu der Überlegung bringt ob ich nicht, wenn ich schon nicht an die Tabelle oder die Zellen ran komme nicht auf irgend einem Wege aus der JSON den Datensatz Nummer "row+1" ziehen könnte weil die Tabelle ja aus der JSON gebaut wird und ich darin ja alles hätte.

          Oder bin ich an der Stelle auf dem kompletten Holzweg?

          Gruß

          Marco

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

          @Throndar

          versteh das Problem nicht ganz, damit gibst du dem TableView ja ein model, und dann solltest du mit model.get() drauf zugreifen können?

          Hier einstackoverflow thread mit Beispiel, hoffe das hilft dir weiter

          https://stackoverflow.com/questions/32956108/qml-tableview-get-data-from-specific-cell-selected-row-specific-column


          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
          1
          • J.HilkJ J.Hilk

            @Throndar

            versteh das Problem nicht ganz, damit gibst du dem TableView ja ein model, und dann solltest du mit model.get() drauf zugreifen können?

            Hier einstackoverflow thread mit Beispiel, hoffe das hilft dir weiter

            https://stackoverflow.com/questions/32956108/qml-tableview-get-data-from-specific-cell-selected-row-specific-column

            T Offline
            T Offline
            Throndar
            wrote on last edited by
            #5

            Hallo @J.Hilk,

            ich versuche es gerade nachzuvollziehen.

            Meine Tabelle baue ich ja so (der Übersichtlichkeit nur eine Spalte)

            TableView {
                    id: view
                    anchors.top: controls.bottom
                    height: root.height - controls.height
                    width: root.width
            
                    TableViewColumn {
                        role: 'name'
                        title: "Servername"
                        width: view.width * 0.5
                    }
            
            onClicked: {
                        console.log(row)
                        console.log(view.model)
                        console.log(view.model.get(row).name)
            
                    }
            }
            

            Ich hatte jetzt versucht über das model vom view (view.model) per get der Zeile (row) auf das Element "name" zuzugreifen.

            Worauf ich als Meldung bekomme:

            qrc:/Clients.qml:117: TypeError: Property 'get' of object [object Object],[object Object] is not a function
            

            Ich bin jetzt am Überlegen was für eine Art model QT beim einlesen per JSON.parse(String) überhaupt anlegt wenn man das als model setzt.

            Der Fehlermeldung nach würde ich meinen das es ja ein ObjectModel ist, was mich aber vor das Problem stellt wie ich drauf zugreifen soll wenn es ja erst beim einlesen der Werte zur Laufzeit erstellt wird.

            Ich habe das Beispiel von dir bei Stackoverflow angeschaut, dort sind die Werte fest in dem ListModel. Ich denke deswegen funktioniert es dort direkt.

            Aktuell bin ich ein wenig Ratlos da die Doku zu ObjectModels Modelle mit Rectangles gefüllt werden auf die aber nicht wieder zugegriffen wird.

            Trotzdem nochmal vielen Dank für die Hilfe,

            Gruß

            Marco

            1 Reply Last reply
            0
            • T Offline
              T Offline
              Throndar
              wrote on last edited by Throndar
              #6

              Ich habs :)

              dein Denkanstoß war genau was ich gebraucht habe. Mein Problem war das ich das falsche Model genutzt habe und es wirklich ein Datenmodel ist nach dem Parse ist.

              Ich habe jetzt zwei Dinge getan:

              1. ein ListModel definiert was ich füllen kann
              ListModel {
                  id: viewModel
              }
              
              1. die Funktion zum das Model zu füllen angepasst um das neu erstelle ListModel mit dem Daten als ListModel zu füllen
              function fillJsonModel()
                  {
                      var data = JSON.parse(clientView.text)
                      for (var i in data) {
                          viewModel.append({ipaddress: data[i]["ipaddress"], name: data[i]["name"],port: data[i]["port"]});
                      }
              }
              

              Anschließend komme ich direkt an meine Felder ran per:

                          console.log("Name: " + view.model.get(row).name)
                          console.log("Adresse: " + view.model.get(row).ipaddress)
                          console.log("Port: " + view.model.get(row).port)
              

              Vielen Dank!

              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