February 29, 2012

clydester clydester
Lab Rat
5 posts

[solved] Wie komme ich über selectionModel an die Daten?

 

Hallo,

dies ist mein erster Beitrag hier, ich hoffe ihr könnt mir ein wenig helfen.
Im Prinzip habe ich mich anhand des Model/View Tutorials (danke dafür!) in meinem eigenen Projekt nach vorne gehangelt und zwei TableViews in meiner GUI untergebracht. Das erste TableView funktioniert wunderbar und macht exakt das, was ich will.
Beim zweiten stoße ich aber an meine Grenzen und bin jetzt seit zwei Tagen circa am verzweifeln.

Long story short: Ich will im TableView mehrere Zeilen anklicken und die Werte von der ersten Spalte (1) bei einem Button_clicked in ein Array schreiben.

  1. QItemSelectionModel objectList = ui->tableView_2->selectionModel();

  1. QModelIndexList indexes = objectList->selectedRows(1);

über

  1. indexes.size();

bekomme ich die Anzahl der Zeilen, die ausgewählt wurden.
Im Prinzip muss ich jetzt nur noch eine Methode haben, mit der ich in einer Schleife die einzelnen Werte aus Spalte 1 in das Array schreiben kann…und genau da hänge ich!
Der Debugger ist mir leider keine große Hilfe. Der crasht permanent, wenn ich versuche die Inhalte von QModelIndexList und QItemSelectionModel anzeigen zu lassen.

//offtopic:
Im ersten TableView habe ich für etwas Ähnliches eine eigene private Funktion “getSerialNumber” geschrieben, mit der ich dann über:

  1. m_model->getSerialNumber(ui->tableView->model()->index(currentRow.row(),0).data().toString());

aus dem Model die passende Serialnumber zur ausgewählten Spalte als String zurückbekomme, die nur im Model, aber nicht im View vorhanden ist. Da war’s entsprechend einfach, weil immer nur eine Zeile ausgewählt sein kann.

Danke schonmal im Vorraus!

3 replies

February 29, 2012

Volker Volker
Ant Farmer
5428 posts

indexes enthält bereits was Du benötigst. QModelIndexList ist ein typedef für QList<QModelIndex> – die Schleife geht dann recht einfach:

  1. foreach(QModelIndex index, indexes) {
  2.     QString value = index.data(Qt::DisplayRole);
  3.     // hier kannst Du value in Dein Array packen
  4. }

March 2, 2012

clydester clydester
Lab Rat
5 posts

Danke!!! Diesen Ansatz hatte ich auch schonmal, hatte ich fast 1:1 noch auskommentiert in meinem Code stehen… facepalm

Es knallt aber trotzdem:

  1. Fehler:conversion from 'QVariant' to non-scalar type 'QString' requested

Wenn ich daraus

  1. QVariant value = index.data(Qt::DisplayRole);

mache, dann funktioniert’s soweit.
Das kann ich dann mit einem Umweg über .toString() fixen.

March 2, 2012

Volker Volker
Ant Farmer
5428 posts

Autsch, stimmt. data() liefert ja ein QVariant zurück. Umwandeln in einen String mit toString() ist problemlos möglich und auch der übliche Weg.

 
  ‹‹ Qt Meetup am 24.02. in Berlin      Suche Qt Entwickler für kleineres Projekt ››

You must log in to post a reply. Not a member yet? Register here!