Seite 1 von 1

QComboBox ( Model ) index bestimmen

Verfasst: 22. März 2009 06:54
von XxM4ST3RxX
mein problem ist folgendes, ich habe eine ComboBox die sich seine items von einem model->relationalModel(x) besorgt und ich will die aktuelle auswahl der box selber bestimmen, habe aber nur den modelIndex des model.

kann mir ja jemmand vll helfen ?

Verfasst: 22. März 2009 09:48
von Christian81
Vielleicht gibts was schnelleres aber - vom Model die Daten des ModelIndex holen und per findText oder findData() danach suchen.

Verfasst: 22. März 2009 22:48
von XxM4ST3RxX
habe ich mir auch schon gedacht das problem ist aber dieses model in der comboBox holt sich daten aus einer db mit 2 spalten eine id und einen namen, es zeigt aber nur den namen an die dürfen aber mehrmals vorkommen und ich kann die datensätze nur über die id unterscheiden ...

Verfasst: 23. März 2009 00:18
von CLRS530
Und wieso geht folgendes nicht?

Code: Alles auswählen

QComboBox::setCurrentIndex(QModelIndex::row());
Ich meine die Frage ernst, da du das sicherlich in betracht gezogen - oder wegen irgendetwas eh verworfen hast :-D.

Verfasst: 23. März 2009 14:07
von XxM4ST3RxX
habe ich versucht aber über die row() bekomme ich das flasche zurück.

hier zb:

*model
(0) (1) (2)
id | name | klasse
0 bla 2 (relation) <- habe z.B. diesen Index
1 bl. 1 (relation)

und in der comboBox ist:
comboBox->setModel(model->relationModel(2));

und wie bekomme ich den aktuellen index der relation...

Verfasst: 23. März 2009 14:24
von CLRS530
Achso ok, ich habe dich missverstanden. Ich habe bei modelIndex an QModelIndex gedacht, dabei beziehst du dich auf die Übergabe für relationModel.
Ich interpretiere in deinen jetztigen Post wieder etwas völlig anderes rein, als in deinen Ersten. Ich kann dich nicht verstehen, was aber auch daran liegen könnte, dass ich mit SQL in Qt bisher nichts gemacht habe, deswegen lass ich dir lieber von anderen helfen.

Verfasst: 23. März 2009 16:18
von XxM4ST3RxX

Code: Alles auswählen

    model->setTable("pupils");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->setHeaderData(0, Qt::Horizontal, tr("ID"));
    model->setHeaderData(1, Qt::Horizontal, tr("Name"));
    model->setHeaderData(2, Qt::Horizontal, tr("Klasse"));
    model->setHeaderData(3, Qt::Horizontal, tr("Geburtstag"));
    model->setRelation(2, QSqlRelation("classes", "id", "name"));
    model->select();

    m_ui->cBEditClass->setModel(model->relationModel(2));
    m_ui->cBEditClass->setModelColumn(1);
Das ist das Model und die ComboBox, das Model habe ich in einem TreeView drin welches mir ja den gewählten Index zurück liefern kann, wie kann ich nun von dem aktuellen Index die Klasse in der ComboBox auswählen ?

Denn mit currentIndex.row() bekomme ich einen falschen zurück, da ein Schüler der in der Klasse A mit id 2 -> in der Box die Klasse B mit 3 angezeigt wird, das Problem ist die Datensätze lassen sich nur an den id's unterscheiden weil die Namen auch öfters vorkommen dürfen. Bei mir in der Datenbank hat jeder Schüler seine eigene id die dann mit einer Klassen id veknüpft ist.

Und mein zweites problem ist zurzeit wie kann ich auf diese Spalte zugreifein ohne die eingesetze Relation zu bekommen z.B.

id | name | class
1 bla 2

ist bei mir im TreeView

id | name | class
1 bla Klasse 2...

und in diesen fall komme ich nicht mehr an die '2' über das model ich bekomme nur die Relation auf den Datensatz mit der id 2 in dem fall 'Klasse 2...', gibt es da ne möglichkeit irgendwie diesen Spaltenwert ohne die Relation zu erhalten ?

Verfasst: 24. März 2009 08:27
von AuE
Was willst du denn genau machen? Evtl solltest du dir nen Filter setzen (z.B. nach Klasse oder Geburtsjahr der Person)

im Moment hast du ja ein Statement a la

Code: Alles auswählen

"Select * from T_Tabelle"
ohne where Klausel. Du könntest ja zB die Schüler gruppieren anhand der Klassen oder Filter zwecks Geburtsjahr setzen.

Oder die ges. DB Struktu anpassen allerding fehlen mir dazu mehr Infos was du genau abbilden möchtest

Verfasst: 24. März 2009 13:37
von XxM4ST3RxX
ich möchte einen Datensatz in einer Datenbank bearbeiten, und wen man ihn im TreeView anklickt sollen die eingabefelder ( die ComboBox ) mit den alten Daten gefüllt werden ...

Verfasst: 24. März 2009 13:57
von AuE
du willst nach dem bearbeiten die alten werte sehen? sry ich komm noch nicht ganz dahinter ;-)

Verfasst: 25. März 2009 08:53
von XxM4ST3RxX
ich will vor dem bearbeiten die alten werte in den editDialog eintragen lasse und wenn man ihn abschickt werden alle felder gepostet deswegen brauche ich die alten daten vorher. und das eine feld ( die comboBox ) bekomme ich nicht eingetragen das ist mein problem.

Verfasst: 25. März 2009 09:03
von AuE
und gehts über

Code: Alles auswählen

ui.comboBox->setCurrentIndex(ui.comboBox->findText("bla"));
Da hättest wieder das doppeldeutigenamensproblem-was aber Latte ist (oder) denn wenn die namen Doppeldeutigsein dürfen ist es doch egal ob/ welcher es ist?!

Verfasst: 25. März 2009 22:49
von XxM4ST3RxX
das ist zwar möglich aber das mit den doppeltnamen ist ein problem den die datensätze sind mit id's verknüpft und wen der datensatz zb. ubennant wird das ist die person zb in einer anderen klasse aber trozdem danke.

// edit

habe jetzt dafür gesorgt das die datensätze nicht mehr die selben namen haben dürfen, somit ist das jetzt auch so ok :)