Besser:
Du bekommst bei fast allen Aktionen einen Modellindex als Position innerhalb der Table.
Statt damit einen weiteren lookup zu machen, kannst du dem ModelIndex Daten in Form eines sizeof(void *) grossen feldes mitgeben.
Das kann ein Zeiger auf Daten sein (achtung lifecycle beachten), oder halt ne ID in nen void* gecastet.
Du ueberschreibst ja die Modelindex funktionen, und benutzt dazu die createIndex() funktion vom AbstractItemModel.
Der Index funktion kannst den Zeiger als parameter befuellen und Voiala alle deine Verwendeten, ausgeworfen QModelIndizies haben den Wert (internalId oder internalPointer) auf den Wert gesetzt.
Also wenn du Bei allen ModelIndezies die ID einträgst, entsprechend Ihrer Row, kannst jedem ModellIndex sofort die zugehörige ID abfragen ....
Das ist die schnelle version.
Die elegante Version ....
Du benutzt die Data funktion wie Oben, nur rufst die am index auf (der leitet die eh ans model weiter).Du gibts Ihr einen Userdefinierten Wert für die Role, also Qt::UserRole + fixen Offset, schoen als Konstante definiert. Beispielsweisse Role_DBID.
Im Model musst ja die data methode implementieren, du bekommst über den Index ja die Row direkt, und kannst anhand dessen die ID in rausgeben, schoen als QVariant verpackt. Da kannst ID oder String reinpacken.
Wenns lustig bist kannst auch beides, aber dann mit unterschiedlicher Role ...
Das würde dir den Code verkürzen ...
Code: Alles auswählen
void adminUserData::on_tableView_activated(const QModelIndex &index)
{
QString val,val2;
qint32 DBId = index.data(Role_DBID).toInt();
// val = ui->tableView->model()->data(index).toString();
// hier die Abfrage mit der DB ID zusammenbauen.
...
}
ist nicht unbedingt schneller, aber leichter lesbarer und besser erweiter bar ....
und anzeige und interne daten sind getrennt (du gehst nicht auf DisplayRole).
Ciao ....