Seite 1 von 1
QTableView, QSqlModel, row löschen
Verfasst: 6. Dezember 2006 11:36
von ZaphodB
Hallo,
ich habe ein TableView eingerichtet, das auf eine SQL-Tabelle über ein SqlModel zugreift. Mittlerweile kann ich auch herrlich Records in die Tabelle einfügen... Aber um Records oder Rows zu löschen benötige ich den Wert des derzeit selektierten Row. Ich habe (nach einigen Stunden Handbuchlektüre) absolut keine Ahnung, wie ich diesen Wert ermitteln kann.
Weiß jemand Rat?
Vielen Dank
Zappo
Verfasst: 6. Dezember 2006 12:30
von Christian81
Verfasst: 6. Dezember 2006 15:34
von ZaphodB
Erstmal Danke für Deine Antwort
Hm, wenn ich das versuche, bekomme ich von make die folgende Meldung:
/usr/include/qt4/QtGui/qtableview.h:131: error: `virtual QModelIndexList QTableView::selectedIndexes() const' is protected
Das würde heißen, ich müsste eine eigenbe Klasse ableiten, um den Wert von row zu ermitteln? Das wäre bitter...
Zappo
Verfasst: 6. Dezember 2006 18:07
von upsala
QAbstractItemView::selectionModel() den Rest darfst du dir selbst raussuchen...
[gelöst]
QTableView, QSqlModel, row löschen
Verfasst: 9. Dezember 2006 12:07
von ZaphodB
Erstmal vielen Dank für Deine Antwort. So einfach, wie durch die Formulierung von Dir dargestellt, ist es allerdings nicht...
Ich habe bei der Initialisierung des Dialogs zusätzlich die folgenden Zeilen eingefügt, um ein QItemSelectionModel für den Löschvorgang zu erhalten:
Code: Alles auswählen
selectionModel = new QItemSelectionModel(model);
selectionModel = tableView->selectionModel();
Der Löschvorgang selber sieht dann wie folgt aus:
Code: Alles auswählen
if (!model->removeRow(selectionModel->selectedRows(1).at(0).row()))
qDebug() << model->lastError();
if (!model->submit())
qDebug() << model->lastError();
Das geht vielleicht eleganter, es funktioniert aber.
Zappo
Verfasst: 9. Dezember 2006 12:56
von upsala
Das widerspricht sich:
selectionModel = new QItemSelectionModel(model);
selectionModel = tableView->selectionModel();
Die Views haben übrigens ein eigenes SelectionModel du must kein neues anlegen...
Dein Code setzt im übrigen vorraus, daß immer nur eine Row ausgewählt ist...
Verfasst: 9. Dezember 2006 18:46
von ZaphodB
Gut, ich werde es ausprobieren...
Bei meinem Beispiel wird lediglich zeilenweise einzeln ausgewählt. Deswegen erfolgt keine Abfrage auf weitere Selections.