Display two columns in a QCombobox from a QSqlRelationalTableModel an map it
-
Hii,
i have a table tblPersonen. I want to display prename and surename in the combobox. And I don't want to lose mapping.
col 0 is id, 1 is surename and 2 is prename
For that i subclassed QSqlTableModel:
@#include "persontablemodel.h"PersonTableModel::PersonTableModel(QObject *parent) :
QSqlTableModel(parent)
{
setTable(tr("tblPersonen"));
setSort( fieldIndex(tr("nName")), Qt::AscendingOrder );
select();
}QVariant PersonTableModel::data(const QModelIndex &_index, int _role) const
{
QVariant value;if( _index.column() == 1 && (_role == Qt::DisplayRole || _role == Qt::EditRole) ) //Wenn Spalte 1 abgerufen wird, soll mithilfe der Mutterklasse der Vorname und daran ein Leerzeichen und dann der Nachname angehängt werden { QString name = QSqlTableModel::data( index(_index.row(), 2) ).toString(); //Vorname name.append(" "); //Daran ein Leerzeichen name.append( QSqlTableModel::data( index(_index.row(), 1) ).toString() ); //und den Nachnamen anhängen value = name; } else value = QSqlTableModel::data(_index, _role); return value;
}@
code from the form:
@
...
//Zuerst die Daten holen (abfragen)
tableModel = new QSqlRelationalTableModel(this); //Da diese Tabelle Fremdschlüssel enthält, muss das relationale TableModel genommen werdentableModel->setTable("tblTankungen"); //Hier werden die Beziehungen zwischen den Tabellen festgelegt tableModel->setRelation(tblTankungen_persID, QSqlRelation(tr("tblPersonen"), tr("persID"), tr("nName"))); tableModel->setRelation(tblTankungen_autoID, QSqlRelation(tr("tblAutos"), tr("autoID"), tr("autoName")));
//*****************************
tableModel->setSort(tblTankungen_tankDat, Qt::AscendingOrder);
tableModel->select();//Hier werden die Comboboxen so eingestellt, dass sie den Wert der eingegebenen Spalte anzeigen //QSqlTableModel *relationModel = tableModel->relationModel(tblTankungen_persID); //ui->cPersID->setModel(relationModel); QSqlTableModel *relationModel = new PersonTableModel(ui->cPersID); ui->cPersID->setModel(relationModel); ui->cPersID->setModelColumn(1);
...
@what works: i see prename (vName) and the surename (nName) in my combobox but the mapper doesn't map it, the combobox is empty if i reload the form
what should work: how can i map the id of the person to the field persID in tblTankungen?
Thank you for helping :)