Seite 1 von 1

QListWidget: Indizes bei Mehrfachselektion ermitteln - Wie ?

Verfasst: 14. Oktober 2007 11:26
von comer352l
Hallo,

wie komme ich am einfachsten an die Indizes der selektierten Zeilen eines QListWidget ? SelectionMode ist QAbstractItemView::ExtendedSelection, also Mehrfachselektion mit Lücken.
Eine einfache Methode, die z.B einen Integer-Vektor zurückgibt, scheint es ja leider nicht zu geben...

Verfasst: 14. Oktober 2007 12:30
von CaptnChaos
hey, weisst du was, die doku lesen wirkt wunder!

Code: Alles auswählen

QList<QListWidgetItem *> QListWidget::selectedItems () const
Returns a list of all selected items in the list widget.
[/code]

Verfasst: 14. Oktober 2007 12:41
von comer352l
Hey, weist du was, Frage lesen wirkt Wunder !
Ich will nicht die Items, sondern die Indizes :lol:. Trotzdem danke...

Ich kann dir versichern, dass ich mir die Dokumentation schon angeschaut habe und auch die Suchfunktion verwendet habe. Mag sein, dass ich was überlesen habe, manchmal sieht man auch den Wald vor lauter Bäumen nicht. Wenn dem so ist, dann schon mal vorsorglich: Entschuldigung !

Verfasst: 14. Oktober 2007 13:04
von upsala

Code: Alles auswählen

QItemSelectionModel * QAbstractItemView::selectionModel () const
QModelIndexList QItemSelectionModel::selectedIndexes () const

Verfasst: 14. Oktober 2007 14:14
von comer352l
Super, danke ! Auf die Idee über QItemSelectionModel zu gehen wäre ich nie gekommen...
Im nächsten Schritt müsste man dann halt noch alle QModelIndex durchgehen und jeweils mit der row()-Methode den dazugehörigen Index auslesen. Ihr müsst zugeben: nicht gerade elegant...

Ganz spontan würde ich sagen, dass das eine Funktion, wie z.B.

Code: Alles auswählen

QList<int> QListWidget::getSelectedIndexes()
ein sinnvoller Verbesserungsvorschlag für künftige Qt-Versionen wäre !?
Auf der anderen Seite kann ich nicht so ganz glauben, dass diese Idee noch niemand vor mit hatte... Ich könnte mir vorstellen, dass es einen guten Grund gibt, warum man bisher auf sowas verzichtet hat ?

Verfasst: 14. Oktober 2007 14:28
von upsala
Nein, erstens gibt es eine Methode alle ausgewählten Rows zu bekommen. Zweitens kann man die nicht als int zurückgeben, da man ja sonst nicht weis in welcher Ebene man sich befindet (parents...)

Verfasst: 14. Oktober 2007 18:47
von comer352l
upsala hat geschrieben:Nein, erstens gibt es eine Methode alle ausgewählten Rows zu bekommen.
Welche Methode meinst du ? Mit QListWidget::currentRow() bekommt man immer nur einen Index zurück, bei Mehrfachselektion ist dass dann immer der der ersten selektierten Zeile.
Zweitens kann man die nicht als int zurückgeben, da man ja sonst nicht weis in welcher Ebene man sich befindet (parents...)


Ich arbeite noch nicht lange mit Qt und habe QListWidget bisher nur als "einfache" Text-Liste verwendet. Ich weiß daher nicht, wie kompliziert die Item-Struktur werden kann bzw. wie groß der gebotene Funktionsumfang wirklich ist. Die Erklärung scheint mir aber zumindest mal nicht unplausibel.

Verfasst: 14. Oktober 2007 19:34
von upsala
Super, danke ! Auf die Idee über QItemSelectionModel zu gehen wäre ich nie gekommen...
Welche Methode meinst du?
Schon mal versucht die Doku durchzulesen?

Verfasst: 14. Oktober 2007 20:21
von comer352l
upsala hat geschrieben: Schon mal versucht die Doku durchzulesen?
Definitiv ja. Is es denn so schwer, einfach den Namen der Methode zu nennen ? Hat doch beim ersten mal prima geklappt :wink:.
Meinst du QItemSelectionModel::selectedRows() ?! Würde in meinem Fall wohl das gleiche Ergebnis wie QItemSelectionModel::selectedIndexes() liefern, gibt aber eben auch nur eine QModelIndexList zurück. Die Indizes muss man dann immer noch einzeln mit der row()-Methode gewinnen.