Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Wie Einstieg in QAbstractItemModel finden?
QtWS25 Last Chance

Wie Einstieg in QAbstractItemModel finden?

Scheduled Pinned Locked Moved Unsolved German
7 Posts 2 Posters 1.4k 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 Throndar
    #1

    Hallo,

    ich beschäftige mich seit ein paar Wochen mit QT und bin gerade irgendwie vor eine Wand gelaufen. Ich versuche im QT Quick einen kleinen Filebrowser / Fileexplorer zu bauen und dafür mit dem Treeview eine Baumansicht zu erstellen die das Laufwerk einliest.

    Für den Treeview benötige ich als "model" wie ich in der Dokumentation gefunden habe, aus dem QAbstractItemModel ein FileSystemModel wenn ich es richtig verstanden habe, nur hänge ich an der Stelle komplett.

    Ich hatte in den Beispielen das "Qt Quick Controls - File System Browser" Beispiel gefunden was aber leider komplett ohne Erläuterung ist und 1:1 zwar läuft, beim Versuch das ganze nachzubauen (ohne die Buttons) bin ich aber vollständig gescheitert so das einen schönen aber leider leeren Filetree bekommen habe.

    Kennt jemand vielleicht eine Quelle / Website die das Thema ein wenig beleuchtet oder allgemein erklärt wie ich die Verzeichnisstruktur eines Laufwerks in ein auswertbares Model für den Treeview umwandeln kann in QT Quick?

    Mit bestem Dank im Vorraus

    Marco

    PS. Als QT Widgets habe ich einige Tutorials gefunden die auch klappen, ich wollte das ganze aber in QT Quick umsetzen da ich bisher in QT Quick schon ein wenig Erfahrung gesammelt habe und in der Richtung weiter machen wollte.

    raven-worxR 1 Reply Last reply
    0
    • T Throndar

      Hallo,

      ich beschäftige mich seit ein paar Wochen mit QT und bin gerade irgendwie vor eine Wand gelaufen. Ich versuche im QT Quick einen kleinen Filebrowser / Fileexplorer zu bauen und dafür mit dem Treeview eine Baumansicht zu erstellen die das Laufwerk einliest.

      Für den Treeview benötige ich als "model" wie ich in der Dokumentation gefunden habe, aus dem QAbstractItemModel ein FileSystemModel wenn ich es richtig verstanden habe, nur hänge ich an der Stelle komplett.

      Ich hatte in den Beispielen das "Qt Quick Controls - File System Browser" Beispiel gefunden was aber leider komplett ohne Erläuterung ist und 1:1 zwar läuft, beim Versuch das ganze nachzubauen (ohne die Buttons) bin ich aber vollständig gescheitert so das einen schönen aber leider leeren Filetree bekommen habe.

      Kennt jemand vielleicht eine Quelle / Website die das Thema ein wenig beleuchtet oder allgemein erklärt wie ich die Verzeichnisstruktur eines Laufwerks in ein auswertbares Model für den Treeview umwandeln kann in QT Quick?

      Mit bestem Dank im Vorraus

      Marco

      PS. Als QT Widgets habe ich einige Tutorials gefunden die auch klappen, ich wollte das ganze aber in QT Quick umsetzen da ich bisher in QT Quick schon ein wenig Erfahrung gesammelt habe und in der Richtung weiter machen wollte.

      raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by
      #2

      @Throndar said in Wie Einstieg in QAbstractItemModel finden?:

      PS. Als QT Widgets habe ich einige Tutorials gefunden die auch klappen, ich wollte das ganze aber in QT Quick umsetzen da ich bisher in QT Quick schon ein wenig Erfahrung gesammelt habe und in der Richtung weiter machen wollte.

      QAbstractItemModel Instanzen geschrieben in C++ können auch in QML verwendet werden.

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

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

        Hallo raven-worx,

        erstmal vielen Dank für die Antwort. Die QAbstractItemModel Instanzen sehen schon einmal sehr gut aus. In dem Beispiel auf der Seite mit den Tieren wird das ganze ja statisch eingegeben in C++ wenn ich das richtig verstanden habe.

        In meinem Widget was ich mir mit Tutorials aus dem Netz gebaut habe hatte ich in der Klasse "Dialog" in der dialog.h die beiden QFileSystemModels *dirmodel und *filemodel unter private definiert.

        In der Dialog.cpp hatte ich das dann vom System eingelesen (einmal die Ordner (dirmodel) und einmal die Dateien (filemodel):

            QString sPath = "";
            dirmodel = new QFileSystemModel(this);
            dirmodel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
            dirmodel->setRootPath(sPath);
        
            ui->treeView->setModel(dirmodel);
        
            filemodel = new QFileSystemModel(this);
            filemodel->setFilter(QDir::Files);
            filemodel->setRootPath(sPath);
        
            ui->listView->setModel(filemodel);
        

        Was sich mir jetzt irgendwie nicht erschließt wie ich im QTQuick an die Daten / das Model ran komme bzw. wo oder wie ich das Model definieren muss um da später ran zu kommen.
        Im Widget definiere ich ja das QFileSystemModel einfach, setzte meine Filter und den Rootpath und sende dann direkt an den Listview und Treeview um alles darzustellen.
        Die Möglichkeit bietet QT Quick ja scheinbar nicht direkt oder habe ich da einen Denkfehler?

        Besten Dank im Voraus für die Mühe

        Marco

        PS. etwas vergleichbares wie http://qmlbook.github.io/index.html zum einlesen in das Thema mit dem Treeview / Models wäre schön, das Openbook hat mir beim Einstieg in Quick sehr geholfen

        raven-worxR 1 Reply Last reply
        0
        • T Throndar

          Hallo raven-worx,

          erstmal vielen Dank für die Antwort. Die QAbstractItemModel Instanzen sehen schon einmal sehr gut aus. In dem Beispiel auf der Seite mit den Tieren wird das ganze ja statisch eingegeben in C++ wenn ich das richtig verstanden habe.

          In meinem Widget was ich mir mit Tutorials aus dem Netz gebaut habe hatte ich in der Klasse "Dialog" in der dialog.h die beiden QFileSystemModels *dirmodel und *filemodel unter private definiert.

          In der Dialog.cpp hatte ich das dann vom System eingelesen (einmal die Ordner (dirmodel) und einmal die Dateien (filemodel):

              QString sPath = "";
              dirmodel = new QFileSystemModel(this);
              dirmodel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
              dirmodel->setRootPath(sPath);
          
              ui->treeView->setModel(dirmodel);
          
              filemodel = new QFileSystemModel(this);
              filemodel->setFilter(QDir::Files);
              filemodel->setRootPath(sPath);
          
              ui->listView->setModel(filemodel);
          

          Was sich mir jetzt irgendwie nicht erschließt wie ich im QTQuick an die Daten / das Model ran komme bzw. wo oder wie ich das Model definieren muss um da später ran zu kommen.
          Im Widget definiere ich ja das QFileSystemModel einfach, setzte meine Filter und den Rootpath und sende dann direkt an den Listview und Treeview um alles darzustellen.
          Die Möglichkeit bietet QT Quick ja scheinbar nicht direkt oder habe ich da einen Denkfehler?

          Besten Dank im Voraus für die Mühe

          Marco

          PS. etwas vergleichbares wie http://qmlbook.github.io/index.html zum einlesen in das Thema mit dem Treeview / Models wäre schön, das Openbook hat mir beim Einstieg in Quick sehr geholfen

          raven-worxR Offline
          raven-worxR Offline
          raven-worx
          Moderators
          wrote on last edited by
          #4

          @Throndar said in Wie Einstieg in QAbstractItemModel finden?:

          Was sich mir jetzt irgendwie nicht erschließt wie ich im QTQuick an die Daten / das Model ran komme bzw. wo oder wie ich das Model definieren muss um da später ran zu kommen.
          Im Widget definiere ich ja das QFileSystemModel einfach, setzte meine Filter und den Rootpath und sende dann direkt an den Listview und Treeview um alles darzustellen.
          Die Möglichkeit bietet QT Quick ja scheinbar nicht direkt oder habe ich da einen Denkfehler?

          Entweder so wie in dem Link den ich gepostet habe beschrieben, oder mittels qRegisterType() das eigene Model registrieren und in QML instanzieren.

          Die Daten des Models bekommt dann die QML Delegate Komponente. Das Mapping von den variablen namen (auf den der Delegate zu griff hat) zu den ItemRoles sind mit der QAbstractItemModel::roleName() Methode zu implementieren.

          --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
          If you have a question please use the forum so others can benefit from the solution in the future

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

            Hallo ravenworx,

            vielen vielen Dank für die ausführliche Antwort.

            Ich merke schon das ich aktuell noch einige Wissenlücken habe und ich mich in das ganze Thema mehr als nur ein bisschen verwirrt (ganz so einfach wie zuerst Gedacht im QT Widget wird es also nicht).

            Wenn ich es soweit verstanden habe liegen im Model selbst alle Daten (bzw. die Verweise darauf), die Delegate Komponente verwaltet die Navigation / Interaktion auf die Informationen im Model also was gerade benötigt wird bzw. was gerade dargestellt wird.

            Die "roles" sind dann dafür da anzugeben was in dem jeweiligen Datenelement des Items für eine Art Daten benötigt (DecorationRole erwartet ein QColor, QIcon oder QPixmap, dagegen ein DisplayRole einen QString)?

            Wenn das soweit stimmen sollte fehlt mir nur noch eine Struktur oder eine Idee wie man so ein Model selbst aufbaut weil die Möglichkeit ein Filemodel von einem bestimmten Ort anzulegen (wie im Widget ab "Sourcepath") gibt es je in Quick nicht.

            Entschuldige bitte wenn es vielleicht für den Profi nach extrem blöden Fragen klingt, aktuell sind bei mir mit jedem Text den ich zu dem Thema lese nur noch mehr Fragen am auftauchen :(

            Nochmals vielen Dank für deine ganze Mühe!

            Marco

            raven-worxR 1 Reply Last reply
            0
            • T Throndar

              Hallo ravenworx,

              vielen vielen Dank für die ausführliche Antwort.

              Ich merke schon das ich aktuell noch einige Wissenlücken habe und ich mich in das ganze Thema mehr als nur ein bisschen verwirrt (ganz so einfach wie zuerst Gedacht im QT Widget wird es also nicht).

              Wenn ich es soweit verstanden habe liegen im Model selbst alle Daten (bzw. die Verweise darauf), die Delegate Komponente verwaltet die Navigation / Interaktion auf die Informationen im Model also was gerade benötigt wird bzw. was gerade dargestellt wird.

              Die "roles" sind dann dafür da anzugeben was in dem jeweiligen Datenelement des Items für eine Art Daten benötigt (DecorationRole erwartet ein QColor, QIcon oder QPixmap, dagegen ein DisplayRole einen QString)?

              Wenn das soweit stimmen sollte fehlt mir nur noch eine Struktur oder eine Idee wie man so ein Model selbst aufbaut weil die Möglichkeit ein Filemodel von einem bestimmten Ort anzulegen (wie im Widget ab "Sourcepath") gibt es je in Quick nicht.

              Entschuldige bitte wenn es vielleicht für den Profi nach extrem blöden Fragen klingt, aktuell sind bei mir mit jedem Text den ich zu dem Thema lese nur noch mehr Fragen am auftauchen :(

              Nochmals vielen Dank für deine ganze Mühe!

              Marco

              raven-worxR Offline
              raven-worxR Offline
              raven-worx
              Moderators
              wrote on last edited by
              #6

              @Throndar
              also ein TreeModel zu implementieren ist schon um einiges schwerer als ein list/table model. Also wenn du das model "flach" hälst tust du dir selbst einen großen Gefallen.

              Hier mal ein projekt von mir das links eine liste an foldern zeigt und rechts eine liste mit den darin enthaltenen dateien.

              Vielleicht gibts ja einen Einblick.

              --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
              If you have a question please use the forum so others can benefit from the solution in the future

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

                Hallo raven-worx,

                vielen vielen Dank!

                ich hab mir gerade dein Beispiel runtergeladen und werde das das Projekt versuchen Schritt für Schritt nachzuvollziehen.

                Du hast mir auf jeden Fall schon sehr geholfen :)

                Nochmals vielen Dank für deine ganze Arbeit!

                Marco

                1 Reply Last reply
                0

                • Login

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