Problem mit setCurrentIndex einer QComboBox

Alles rund um die Programmierung mit Qt
Antworten
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Problem mit setCurrentIndex einer QComboBox

Beitrag von tribari »

Hallo allerseits,

ich habe ein Widget erstellt - auf diesem Widget befindet sich eine QComBobox. Diese ComboBox habe ich mit vier Einträgen vorbelegt im Designer...

Zu dem Widget habe ich einen Slot erstellt wie folgt:

Code: Alles auswählen

void MyWidget::setCurrentIndexOfMyCombo(int index)
{
     ui->comboBox->setCurrentIndex(index);
     qDebug() << index;
}
Nun möchte ich, dass nicht der erste Eintrag beim Start selektiert wird, sondern der zweite... also füge ich im Konstruktor folgende Zeile ein:

Code: Alles auswählen

MyWidget::MyWidget(QWidget *parent) 
: QWidget(parent),
ui(new Ui::MyWidget)
{
     ui->setupUi(this);
     setCurrentIndexOfMyCombo(1);
}
Allerdings wird nicht der zweite Eintrag in meiner ComboBox selektiert...

nun habe ich einen Pushbutton testweise implementiert - welcher den Befehl setCurrentIndexOfMyCombo(1); aufruft... und siehe da, es funktioniert.

Warum kann ich beim Start nicht den entsprechenden Index auswählen?

Bei den Debug Ausgaben bekomme ich immer den richtigen Wert!?

Verwende QT 4.6.3.

Über nen Tip wäre ich dankbar.

mfg

tribari
wirbelwurm
Beiträge: 11
Registriert: 15. Juli 2010 15:13
Kontaktdaten:

Beitrag von wirbelwurm »

Moin,

vielleicht hast du den falschen Konstrukter bearbeitet. Bei Java wird Standardmäßig der Kontruktor ohne Parameter aufgerufen.

Prüf mal mit Cout, ob dein Befehl überhaupt ausgeführt wird. Sonst fällt mir jetzt spontan auch nichts ein

Gruß
Wirbelwurm
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag von tribari »

also der befehl wird definitiv ausgeführt - warum es beim initialisieren nicht funktioniert - später jedoch schon - kann ich mir nicht erklären...

wahrscheinlich ein bug oder so...

habe mir jetzt anders beholfen - in dem ich keine combobox für den fall verwende ;-)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo wird die Combobox gefüllt?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wirbelwurm
Beiträge: 11
Registriert: 15. Juli 2010 15:13
Kontaktdaten:

Beitrag von wirbelwurm »

Wenn die Combobox im Designer gefüllt wurden ist. Wird im Code die Box beim Befehl ui->setupUi(this); gefüllt oder? Dann wäre alles Palleti.

Kann mir das Geschehen auch nicht erklären
sanni
Beiträge: 39
Registriert: 27. Mai 2010 11:53

Beitrag von sanni »

So ein ähnliches Problem habe ich auch mal gehabt. Das habe ich damit gelöst, dass ich die ComboBox in einer init()-Methode erstellt habe, und die Auswahl habe ich dann am Ende des Konstruktors gesetzt.

Hört sich etwas merkwürdig an, aber vielleicht braucht Qt einfach nur ein bisschen mehr Zeit um die ComboBox zu erstellen und zu füllen, als das im Text der Fall ist :roll:
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

möglich wäre auch ein

Code: Alles auswählen

QTimer::singleShot(1,this,combobox,SLOT(setTo1()));
in den Konstruktor zu packen ...

Code: Alles auswählen

void setTo1() { ui->combobox->setCurrentIndex(1); }
ist ein privater slot ist der die combobox aufs erste Element schaltet ... das wird erst ausgeführt 1 ms nachdem die Eventloop gestartet ist ... da ist dann alles korrekt initialisiert ... aber sowas ist mE kein guter Stil.[/code]
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das hier nennt sich ein minimales reproduzierbares Beispiel:

Code: Alles auswählen

QComboBox *c=new QComboBox(0);
c->addItem("1");
c->addItem("2");
c->addItem("3");
c->setCurrentIndex(1);
c->show();
Bei wem funktioniert das jetzt angeblich nicht?
sanni
Beiträge: 39
Registriert: 27. Mai 2010 11:53

Beitrag von sanni »

Wer weiss, was da so alles zwischen den Zeilen passiert :)

Aber mal etwas ernster: gib doch mal einen Tip ab, warum das nicht funktioniert!
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag von tribari »

also mir ist es auch ein Rätsel...

habe die ComboBox im Designer mit Einträgen befüllt - und wenn ich dann im Konstruktor nach ui->setupUi(this); den Index mit ui->comboBox->setCurrentIndex(2); aufrufen will geschieht garnichts...

Das Problem ist mir inzwischen schon zweimal begegnet - bei früheren QT-Versionen gab es da auch nie Probleme... muss echt etwas spezifisches sein.

Wenn ich dann zB einen Button auf der GUI erstelle - diesen mit einem Slot verbinde... und im Slot dann wieder ui->comboBox->setCurrentIndex(2); aufrufe klappt alles wunderbar!?

Ich hab das ganze jetzt auf die Liste der ungeklärten Mysterien unserer Zeit geschoben :D

Sofern niemand ne triftige Idee hat, glaub ich weiterhin daran das es nen Bug ist. ^^
Antworten