Seite 1 von 1

Liste von QPoints komfortabel in QListWidget verwalten

Verfasst: 11. März 2011 13:53
von maxl451
Hallo miteinander!

Ich beschäftige mich seit einiger Zeit mit Qt und schaffe es nicht das folgende Problem zu lösen:

In C# (in Kombination mit WindowsForms) kann man einer Listbox bequem ein Objekt wie eben einen Punkt übergeben und mittes der Methode "ToString" wird bestimmt, welcher Text dann in der Liste angezeigt wird. Das beste daran ist, wenn der Benutzer nun einen aufgelisteten Eintrag - z.B. in der Form (x_Koordinate|y_Koordinate) - ausgewählt hat, dass mein leicht das entsprechende Objekt erhält und sofort auf dessen Daten zugreifen, bzw. diese verändern kann.

In Qt habe ich nun eine QList<QPoint>. Ich schaffe es zwar problemlos diese in einem QListWidget anzeigen zu lassen, indem ich folgendermaßen einen Eintrag hinzufüge:

Code: Alles auswählen

listWidgetPoints->addItem(new QListWidgetItem( "( " + QString::number(x_Coordinate) + " | " + QString::number(y_Coordinate) + " )", listWidgetPoints, QListWidgetItem::UserType));
Doch wenn ich mir nun mittels listWidgetPoints.currentItem() die Adresse des aktuell ausgewählten Punkts besorge, wie kann ich dann bequem auf dessen Koordinaten wieder zugreifen?
Meine sehr unbequeme Lösung ist bisher das analysieren des QStrings, der mir von text() der Klasse QListWidgetItem zurückgegeben wird.

Die Frage kann nicht nur speziell für eine Liste von QPoints gedeutet werden, sondern allgemein für einen beliebige Klasse.
Meine Recherchen haben bisher ergeben, dass es wahrscheinlich über das Model/View Programming von Qt zu lösen ist. Doch in allen gefundenen Beispielen wurde stets mit QStrings gearbeitet...

Vielen Dank an alle im Voraus!

Verfasst: 11. März 2011 14:10
von franzf
setData() kannst du als role ein Qt::UserRole+eigenerOffset übergeben, dort den passenden QPoint reinstecken (der value ist ein QVariant). abholen per item->data() mit obiger eigener role.

So einfach...

Verfasst: 11. März 2011 14:47
von maxl451
Vielen Dank franzf!