QTreeView mit einem geänderten QModelIndex aus einem anderen QTreeView
-
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
-
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?
-
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/erstesBildNun 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.
-
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.
-
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);
@ -
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. -
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.
:) -
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.)
-
Danke für den Tip mit den Tags. Werde mich in Zukunft daran halten...