QSqlRelationalModel and QCombobox
-
Hallo,
ich habe folgendes Problem, an dem ich mir die Zähne ausbeiße:
Ich habe eine Tabelle, in der die Felder "receiver_id" und "author_id" enthalten sind. Diese verweisen auf die Tabellen address und author.
model = new QSqlRelationalTableModel(this); model->setTable("letter"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); receiverIndex = model->fieldIndex("receiver_id"); authorIndex = model->fieldIndex("author_id"); model->setRelation(receiverIndex, QSqlRelation("address", "id", "name")); model->setRelation(authorIndex, QSqlRelation("author", "id", "name")); /* andere statements*/ QSqlTableModel *authorRelModel = model->relationModel(authorIndex); authorComboBox->setModel(authorRelModel); authorComboBox->setModelColumn(authorRelModel->fieldIndex("name")); QSqlTableModel *receiverRelModel = model->relationModel(receiverIndex); receiverComboBox->setModel(receiverRelModel); receiverComboBox->setModelColumn(receiverRelModel->fieldIndex("name")); /* andere statements */ mapper->setItemDelegate(new QSqlRelationalDelegate(this)); mapper->addMapping(titleLineEdit, model->fieldIndex("title")); mapper->addMapping(authorComboBox, authorIndex); mapper->addMapping(receiverComboBox, receiverIndex);
Das funktioniert auch richtig gut: Die werden in der QComboBox mit den richtigen Werten angezeigt und die Modelle (die SQL-Tabelle) enthalten nach dem Submit die richtigen Daten.
Ich benötige von der ComboBox für eine Abfrage von weiteren Feldern den Wert receiver_id, bekomme aber lediglich den angezeigten Namen. (QVariant(QString, "Müller"))
receiverComboBox->currentData(Qt::EditRole);
Gibt es irgendeine Möglichkeit diesen Wert von der Combobox zu bekommen? Wahrscheinlich übersehe ich irgendetwas.
Wäre toll, wenn jemand die Lösung kennt.
-
Ich habe es tatsächlich herausbekommen. Im Signal
QComboBox::currentIndexChanged
wird der Index des ausgewählten Eintrags übergeben. Und über
QSqlTableModel *receiverRelModel = model->relationModel(receiverIndex); QSqlRecord record = receiverRelModel->record(index);
konnte ich dann auf den richtigen Record der Tabelle und damit die Felder zugreifen.
Es war mir nicht klar, dass das über den Index so einfach gesteuert werden kann.
-