Problem QModelIndex und QTableView

Alles rund um die Programmierung mit Qt
Antworten
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Problem QModelIndex und QTableView

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Problem QModelIndex und QTableView

Beitrag von solarix »

Ich habe das bisher immer via "selectionModel" erledigt (in deinem Fall "view->selectionModel()->selectedRows()")..

hth..
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Problem QModelIndex und QTableView

Beitrag 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
Antworten