Liste von QPoints komfortabel in QListWidget verwalten

Verschiedenes zu Qt
Antworten
maxl451
Beiträge: 6
Registriert: 11. März 2011 12:50

Liste von QPoints komfortabel in QListWidget verwalten

Beitrag 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!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
maxl451
Beiträge: 6
Registriert: 11. März 2011 12:50

So einfach...

Beitrag von maxl451 »

Vielen Dank franzf!
Antworten