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 werden

    tableModel->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 :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.