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
Problem QModelIndex und QTableView
-
- Beiträge: 113
- Registriert: 31. März 2011 17:19
- Wohnort: Aachen
- Kontaktdaten:
Re: Problem QModelIndex und QTableView
Ich habe das bisher immer via "selectionModel" erledigt (in deinem Fall "view->selectionModel()->selectedRows()")..
hth..
hth..
-
- Beiträge: 113
- Registriert: 31. März 2011 17:19
- Wohnort: Aachen
- Kontaktdaten:
Re: Problem QModelIndex und QTableView
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:)
und dann der entsprechende SLOT:
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
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);
Code: Alles auswählen
void Hauptfenster::DatensatzLoeschen()
{
QModelIndexList AktuellAusgewaehlteZeile = Table->selectionModel()->selectedRows();
if(AktuellAusgewaehlteZeile.size() == 1)
{
model->removeRow(AktuellAusgewaehlteZeile.at(0).row());
model->submitAll();
}
}
Viele Grüße,
Marcus