Seite 1 von 1
Fremdschlüssel in QCombobox
Verfasst: 6. Oktober 2015 21:31
von qtued
Hallo zusammen,
folgendes Beispiel:
tab_personen
-----------------
ID
NAME
VORNAME
LAND
tab_laender
-----------------
ID
LAND
In der Tabelle tab_personen wird als LAND die ID des Landes der Tabelle
tab_laender als Fremdschlüssel abgespeichert.

Problem: Ich möchte in einer QCombobox alle Länder als Text aufgelistet haben. Im Hintergrund muss aber natürlich die ID mitgeführt werden, da diese dann beim Speichern in die Tabelle
tab_personen geschrieben werden soll.
Kann mir jemand einen Tip geben wie ich sowas in Qt am besten anstelle?
Bin noch Anfänger und für jeden Tip dankbar!
Gruß, Andi
Re: Fremdschlüssel in QCombobox
Verfasst: 7. Oktober 2015 06:20
von Christian81
Ich würde einfach die Funktion
Code: Alles auswählen
void QComboBox::addItem(const QString & text, const QVariant & userData = QVariant())
benutzen.
Re: Fremdschlüssel in QCombobox
Verfasst: 7. Oktober 2015 09:51
von RHBaum
Was Christian beschreibt, ist die einfachste Lösung. QComboBox bietet ein "abgespecktes" Interface wo man zu den "Display" Daten noch ein Satz User Daten (Variant) hinterlegen und anfragen kann.
Für Komplexere DInge ist die Combobox als View auf ein Model realisiert, was immer nur eine Zelle Anzeigt, und sich die Posi der Zelle ueber die Auswahl verschieben läßt.
Wenn man sich in die Model-View Architektur speziell von Qt einarbeitet, kann man damit auch komplexere Dinge loesen ... und vor allem schon vorhandene Models verwenden, die man an anderer STelle vielleicht eh schon braucht (Sql Models etc).
In nem Model kannst du z.b. zig verschiedene Sätze an Zusatzdaten hinter ner Zelle "verstecken" (siehe DataRole)
Ciao ...
Re: Fremdschlüssel in QCombobox
Verfasst: 16. Oktober 2015 17:50
von qtued
Vielen Dank für euere Antworten!
Für die Nachwelt: Ich habe mittlerweile einen Artikel gefunden, der eigentlich genau beschreibt, was ich gesucht habe:
QCombobox mit Werten aus der Datenbank in Forms
http://www.informit.com/articles/articl ... 0&seqNum=3
Auch in der Doku zum QSqlRelationalTableModel ist weiter unten ein sehr gutes Beispiel zu dem Thema. In dem gehts aber eher um die Darstellung in QTableViews/QListViews:
http://doc.qt.io/qt-4.8/qsqlrelationaltablemodel.html
Danke nochmal für die Hilfe - Thread hiermit geschlossen

Re: Fremdschlüssel in QCombobox
Verfasst: 26. Oktober 2016 19:04
von qtued
Jetzt muss ich hier doch nochmal nachhaken: Eine Lösung per QDataWidgetMapper (wie in meinen Links beschrieben) hätte wohl funktioniert, ich hätte aber lieber eine Lösung ohne direktes Mapping mit der Datenbank.
RHBaum hat geschrieben:Was Christian beschreibt, ist die einfachste Lösung. QComboBox bietet ein "abgespecktes" Interface wo man zu den "Display" Daten noch ein Satz User Daten (Variant) hinterlegen und anfragen kann.
Das ist mir soweit klar: Ich kann also in der QComboBox sowohl mein anzuzeigendes Land, also auch die ID abspeichern, die sich dahinter verbirgt. Aber jetzt hätte ich noch eine Frage zum Design: Mein Ansatz wäre eine Klasse CPerson gewesen, die vereinfacht dargestellt so aussieht:
Code: Alles auswählen
class CPerson
{
...
private:
QString name
QString vorname
int/QString land // PROBLEM: ID merken oder String?
}
Zum Programmstart hätte ich die Datenbank ausgelesen, für jede Zeile ein CPerson angelegt und mir das in einer QList<CPerson*> gemerkt. Zum Befüllen meiner QTableView wäre ich die QMap durchlaufen und hätte QStandartItem* erzeugt.
Ein Problem hab ich jetzt natürlich wieder beim Land, weil ich ja für meine QComboBox die ID und den String des Landes bräuchte.
Ist das denn generell ein unbrauchbarer Ansatz? Oder hab ich nur etwas übersehen? Wie würdet ihr das machen?
Vielen Dank schonmal!