Seite 1 von 1

Problem QModelIndex und QTableView

Verfasst: 7. Dezember 2011 00:16
von Marcus Breuer
Guten Abend,

ich habe eine kurze Frage zu QModelIndex. Kurz, ich habe ein Hauptfenster, in dem im Großen und Ganzen nur ein QTableView den Inhalt einer Datenbank anzeigt. Alles soweit kein Problem. Um ganze Zeilen löschen zu können, habe ich vorweg geschrieben, dass halt immer nur ganze Zeilen markiert werden können, eigentlich auch egal, dann ein Kontextmenü erstellt und dort die Action Datensatz löschen angelegt. Klicke ich nun darauf, soll mir die entsprechende Funktion mit model->removeRow(Table->currentIndex().row()) die Zeile löschen. model ist dabei ein QSqlTableModel. Das funktioniert auch super. Habe ich allerdings keine Zeile markiert, wird Table->currentIndex().row() immer der Wert 0 zugewiesen und folglich auch dann eine Zeile gelöscht, wenn ich nichts ausgewählt habe. Kann mir da vielleicht jemand den Fingerzeig geben, wie es richtig geht?

Viele Grüße,
Marcus

Re: Problem QModelIndex und QTableView

Verfasst: 7. Dezember 2011 07:48
von solarix
Ich habe das bisher immer via "selectionModel" erledigt (in deinem Fall "view->selectionModel()->selectedRows()")..

hth..

Re: Problem QModelIndex und QTableView

Verfasst: 7. Dezember 2011 08:24
von Marcus Breuer
Guten Morgen solarix,

vielen dank für deine Lösung. Wollte meine gerade posten und ich bin gerade eben auf das gleiche Ergebnis gekommen, wie Du. Damit klappt es wunderbar. Damit hat es sich dann auch erledigt. Für den Fall, dass andere dieses Problem haben, hier ein paar Fragmente aus meinem Code.

@solarix: Vielen Dank für die frühe Antwort. Gestern Abend bin ich daran verzweifelt. Es war wohl auch schon etwas zu spät:)

Code: Alles auswählen

 Table = new QTableView(this);    
Table->setSelectionMode(QAbstractItemView::SingleSelection);
Table->setSelectionBehavior(QAbstractItemView::SelectRows);
und dann der entsprechende SLOT:

Code: Alles auswählen

void Hauptfenster::DatensatzLoeschen()
{
   QModelIndexList AktuellAusgewaehlteZeile = Table->selectionModel()->selectedRows();
   if(AktuellAusgewaehlteZeile.size() == 1)
   {
       model->removeRow(AktuellAusgewaehlteZeile.at(0).row());
       model->submitAll();
   }
}
Die Frage, ob das if(...size() == 1) nötig ist? Ich habe es zur Sicherheit einfach mal eingebaut, damit im schlimmsten Fall nichts schief gehen kann.

Viele Grüße,
Marcus