QComboBox ( Model ) index bestimmen

Alles rund um die Programmierung mit Qt
Antworten
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

QComboBox ( Model ) index bestimmen

Beitrag 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 ?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Vielleicht gibts was schnelleres aber - vom Model die Daten des ModelIndex holen und per findText oder findData() danach suchen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

Beitrag 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 ...
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag 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.
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

Beitrag 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...
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag 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.
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

Beitrag 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 ?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

Beitrag 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 ...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

du willst nach dem bearbeiten die alten werte sehen? sry ich komm noch nicht ganz dahinter ;-)
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

Beitrag 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.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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?!
XxM4ST3RxX
Beiträge: 39
Registriert: 14. Oktober 2008 19:50

Beitrag 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 :)
Antworten