Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. QTreeView mit einem geänderten QModelIndex aus einem anderen QTreeView

QTreeView mit einem geänderten QModelIndex aus einem anderen QTreeView

Scheduled Pinned Locked Moved German
10 Posts 3 Posters 6.0k 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.
  • R Offline
    R Offline
    Robert Brei
    wrote on last edited by
    #1

    Hallo zusammen.
    Ich habe hier ein Problem mit einem ModelIndex.
    Ich würde gerne einen Modelindex aus einem QTreeView auslesen und ihn dann in geänderter Form im einem zweiten TreeView wieder einfügen.

    Grundlegend soll die Funktion dann den markierten Eintrag aus dem ersten View im zweiten, der aber einen anderen Vereichnisspath hat, wieder markieren.

    Ich habe schon den Index aus dem ersten View ausgelesen und ihn dann einfach im zweiten View gesetzt.
    Mit modelindex->setData() bin ich auch nicht weiter gekommen.

    bin ich auf dem richtigen Weg?

    LG Robert

    1 Reply Last reply
    0
    • G Offline
      G Offline
      giesbert
      wrote on last edited by
      #2

      Hi Robert,

      bist du nicht :-)

      QModelIndex entspricht den Koordinaten innerhalb eines Models. Solange 2 views nicht das selbe model verwenden, kannst du einen model index auch nicht in der 2. view verwenden.

      Bitte beschreib doch mal genauer den use case, ohne einen model index.

      Was ich verstanden habe ist, du hast 2 views, in der ersten tust du was und in der 2. soll was passieren... Aber was tust du und was soll passieren?

      Nokia Certified Qt Specialist.
      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

      1 Reply Last reply
      0
      • R Offline
        R Offline
        Robert Brei
        wrote on last edited by
        #3

        Ok.
        Ich klicke im ersten View auf einen Eintrag.
        Dann verbinde ich mit connect und dem Signal ckicked() zum zweiten View der eigene Models (QDirModel / QModelIndex) hat.
        Wenn der zweite View geladen ist soll er den gleichen Eintrag markieren welcher im ersten View markiert wurde. Der Unterschied zwischen den beiden Views ist lediglich ein unterschiedlicher Verzeichnisspaht.

        z.B:
        View 1 hat c:/eigene Dateien/Eltern/Bilder/Geburtstag/erstesBild
        View 2 hat c:/eigene Dateien/Kinder/Bilder/Geburtstag/erstesBild

        Nun soll nur Eltern mit Kinder ersetzt werden und wieder das Bild "erstesBild.jpg" soll markiert sein.

        Ich habe sowas schon mit einem QListView hinbekommen. Aber ich habe keine Idee wie ich in einem TreeView den index setzen kann, da der currentIndex(a,b,(?parentItem),QDirModel(?))
        bei "b" immer null ist.

        hoffe es is so verstaendlicher.

        1 Reply Last reply
        0
        • G Offline
          G Offline
          giesbert
          wrote on last edited by
          #4

          DU bist zwar immernoch auf der tzechnischen ebene (also niocht im usecase) aber es wird schon klarer.
          Das geht nicht mit dem model index.

          Zwei models haben IMMER unterschiedliche model indexes.

          Du kannst nur im ersten model den namen des bildes holen und dann im 2. genau diesen namen suchen und ihn der view setzen.

          Nokia Certified Qt Specialist.
          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

          1 Reply Last reply
          0
          • G Offline
            G Offline
            goetz
            wrote on last edited by
            #5

            Ich gehe mal davon aus, dass es sich bei beiden models um ein QDirModel handelt. Dazu vorweg: [[Doc:QDirModel]] ist deprecated (also als veraltet markiert), Du solltest es durch ein [[Doc:QFileSystemModel]] (QFSM) ersetzen. Meine Ausführungen im folgenden beziehen sich daher auf das QFSM.

            Du kannst aus dem index das per signal von der ersten view kommt, den Pfad auslesen:

            @
            QString firstPath = indexFromFirst->data(QFileSystemModel::FilePathRole).toString();
            @

            Den Pfad kannst Du dann manipulieren, z.B. durch suchen/ersetzen auf dem String. Wie genau hängt natürlich von Deiner Anwendung ab.

            @
            QString secondPath = firstPath.replace("Eltern", "Kinder");
            @

            Mit dem neuen Pfad suchst Du den passenden Index im Model für deine zweite View:

            @
            QModelIndex indexInSecond = secondModel->index(secondPath);
            @

            http://www.catb.org/~esr/faqs/smart-questions.html

            1 Reply Last reply
            0
            • R Offline
              R Offline
              Robert Brei
              wrote on last edited by
              #6

              Hallo.
              Den Pfad konnte ich setzen.
              Leider habe ich immernoch das Problem mit dem Index.
              Ich kann zwar den Namen auslesen aber ich habe keine Idee wie ich diesen namen dann in einem QTreeView setzen soll ...
              Ich habe versucht mit einem QItemSelectionModel einen Index zu setzen aber ohne Erfolg.
              Einen currentIndex im TreeView setzen sodas ein Eintrag makiert wird, auch ohne Erfolg.

              1 Reply Last reply
              0
              • G Offline
                G Offline
                goetz
                wrote on last edited by
                #7

                Was verstehst Du unter "wie ich diesen namen dann in einem QTreeView setzen soll"?
                Ist indexInSecond überhaupt gültig?

                http://www.catb.org/~esr/faqs/smart-questions.html

                1 Reply Last reply
                0
                • R Offline
                  R Offline
                  Robert Brei
                  wrote on last edited by
                  #8

                  Danke für die hilfreichen Infos.
                  Die Lösung für mein Problem:
                  Ich habe einen zweiten QModelIndex hinzugefügt und habe diesem den geänderten Pfad übergeben.
                  @ modelIndexTreeView2 = dirmodel->index (qsPath);
                  ui->treeView->setCurrentIndex (modelIndexTreeView2);
                  ui->treeView->setExpanded (modelIndexTreeView2,true);@
                  Nach setCurrentIndex und setExpand habe ich den gewünschten Eintrag makiert und der Tree ist bis zu diesem Eintrag ausgeklappt.
                  :)

                  1 Reply Last reply
                  0
                  • G Offline
                    G Offline
                    goetz
                    wrote on last edited by
                    #9

                    Prima dass das jetzt funktioniert. Es ist richtig, dass Du für das zweite Model auch einen zweiten Index brauchst. Die Indexe sind nicht zwischen den Models austauschbar.

                    Eine Bitte noch: Den Code bitte in @-tags einschliessen (oder den code-button des Editors benutzen). Damit wird das schön formatiert und die Umbrüche bleiben erhalten (ist auch nützlich für Log-Ausgaben, etc.)

                    http://www.catb.org/~esr/faqs/smart-questions.html

                    1 Reply Last reply
                    0
                    • R Offline
                      R Offline
                      Robert Brei
                      wrote on last edited by
                      #10

                      Danke für den Tip mit den Tags. Werde mich in Zukunft daran halten...

                      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