Seite 1 von 1

QComboBox mit ID?

Verfasst: 15. Januar 2008 08:53
von tomsi
Hallo!

Weis jemand wie man eine ID für jeden Eintrag in der ComboBox ablegt und wieder abfragt?
Mit "insertItem" wird ja nur der sichtbare Text eingefügt.
Brauche in meinem Fall aber zusätzlich die ID von jedem Eintrag. Vorzugsweise Unsichtbar.
Danke...

Verfasst: 15. Januar 2008 09:09
von upsala
Verwende ein Model.

Verfasst: 15. Januar 2008 09:18
von tomsi
Danke für die schnelle Antwort :D !
Habe viele aber dafür einfache ComboBoxen und wollte dafür kein Model stricken. Aber ist wohl die einzige Lösung...

Verfasst: 15. Januar 2008 11:43
von ArneStocker
ich würde zwar auch ein model empfehlen, aber versuch es doch mal mit

Code: Alles auswählen

combobox.setItemData(index,irgendEinObject);
wobei irgendEinObject ja auch von der Klasse Long sein kann.

Gruß Arne

Verfasst: 30. Januar 2008 14:23
von methusalem
ArneStocker hat geschrieben:...

Code: Alles auswählen

combobox.setItemData(index,irgendEinObject);
wobei irgendEinObject ja auch von der Klasse Long sein kann.
Ich hol das noch mal hoch, weil ich auch ne simple Lösung suche:

Ich hab ne ComboBox mit den Einträgen:

Maximal
Minimal
Durchschnitt

Nun muss ich die Auswahl auswerten und im Programm je nach Auswahl einen QString weitergeben.

Maximal -> CAL_MAX
Minimal -> CAL_MIN
Durchschnitt -> CAL_AVERAGE

Ich könnte also mit setItemData() diese Strings an den entsprechenden Index kleben und später auslesen? Kann ich das auch schon in den Properties des Designers?

Verfasst: 30. Januar 2008 16:57
von ArneStocker
Kann ich das auch schon in den Properties des Designers?
Nach meiner Kenntnis nicht. Das dürfte nur programmatisch gehen. Wenn wir gerade bei einfachen Lösungen sind, es gibt auch die simple Klasse

QStringListModel

mit der lässt sich Dein Problem auch relativ einfach lösen.

Gruß Arne

Verfasst: 30. Januar 2008 17:05
von methusalem
Moin,

ich komme aus der QT 3 Welt und programmiere auch jetzt noch beruflich mit der Version 3. Bisher hatte ich noch nicht die Ruhe mich in das Model/View Konzept einzulesen. Daher im Moment der für mich simplere Weg.

Du hast sicher recht. Und irgendwann werde ich mich damit beschäftigen. Wenn du allerdings die Muse hast mir in ein paar Zeilen zu erklären, wie ich dieses Model in meinem Fall nutzen kann, wäre das ja ein Anfang für mich.

Verfasst: 4. Februar 2008 20:12
von ArneStocker
.. im Moment habe ich gerade 0,0 Zeit dazu weil ich in 10 Tagen eine Release fertigstellen muss (und leider auch kein Beispiel im eigenen Source weil ich mit selbst abgeleiteten Models arbeite). Vielleicht in der nächsten Woche

Gruß Arne

Verfasst: 26. März 2009 09:30
von pospiech
(die Frage ist eher allgemein Qt spezifisch als Qt Jambi)

Ich würde auch gerne analog zu QButtonGroup IDs an die Einträge von der combobox heften.

Leider kann ich anhand der Doku von QComboBox zwar erkennen das man einen Index vergeben kann (ist das sowas wie eine ID?)

Code: Alles auswählen

void QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole )
aber ich sehe nicht wie ich den Index wieder abfragen kann.

Die Hinweise in diesem Thread zu einem Model helfen mir leider ohne irgentein Code Beispiel nicht weiter. Und was QStringListModel mir dabei helfen könnte sehe ich auch nicht, denn es liefert ebenfalls keine ID zurück.

Verfasst: 27. März 2009 11:26
von ArneStocker

Code: Alles auswählen

QComboBox combobox = new QComboBox();
...
// setzen
combobox.setItemData(index,new QVarian(..irendwas ...))
...
// lesen
QVariant data = combobox.getItemData(index);
oder für den aktuellen (ausgewählten) index

Code: Alles auswählen

QVariant data = combobox.getItemData(combobox.currentIndex());
... wobei index einfach die Reihenfolge der Einträge beginnend mit 0 kennzeichnet. War es das, was Du meintest ?

Gruß Arne

Verfasst: 27. März 2009 11:27
von pospiech
Ja, außer das ich mit QString auch schon zufrieden wäre ist es das wohl

Verfasst: 27. März 2009 11:32
von ArneStocker
QString gibt es in QtJambi nicht, nimm stattdessen ein String objekt (auch "hallo" ist ein Stringobjekt). Es geht halt auch ein Long oder Integer oder jedes andere von Object abgeleitete Objekt. Um bei mehreren Objekten rauszufinden, was sich hinter dem Eintrag versteckt kannst Du prüfen :

Code: Alles auswählen

Object data = combobox.getItemData(index);
if (data instanceof EineKlasse) {
    EineKlasse objekt = (EineKlasse) data;
   ...
}
Gruß Arne