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.