QTableView, QSqlModel, row löschen

Alles rund um die Programmierung mit Qt
Antworten
ZaphodB
Beiträge: 6
Registriert: 4. Dezember 2006 20:14

QTableView, QSqlModel, row löschen

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ZaphodB
Beiträge: 6
Registriert: 4. Dezember 2006 20:14

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QAbstractItemView::selectionModel() den Rest darfst du dir selbst raussuchen...
ZaphodB
Beiträge: 6
Registriert: 4. Dezember 2006 20:14

[gelöst] QTableView, QSqlModel, row löschen

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
ZaphodB
Beiträge: 6
Registriert: 4. Dezember 2006 20:14

Beitrag von ZaphodB »

Gut, ich werde es ausprobieren...

Bei meinem Beispiel wird lediglich zeilenweise einzeln ausgewählt. Deswegen erfolgt keine Abfrage auf weitere Selections.
Antworten