QComboBox mit ID?

Alles zum Qt Framework für Java
Antworten
tomsi
Beiträge: 7
Registriert: 3. Dezember 2007 09:36

QComboBox mit ID?

Beitrag 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...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Verwende ein Model.
tomsi
Beiträge: 7
Registriert: 3. Dezember 2007 09:36

Beitrag 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...
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag 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?
Martin
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag 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.
Martin
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Beitrag 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.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
Zuletzt geändert von ArneStocker am 27. März 2009 11:28, insgesamt 1-mal geändert.
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Beitrag von pospiech »

Ja, außer das ich mit QString auch schon zufrieden wäre ist es das wohl
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

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