Seite 1 von 1

Problem mit setCurrentIndex einer QComboBox

Verfasst: 23. Juli 2010 11:31
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

Verfasst: 23. Juli 2010 13:29
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

Verfasst: 23. Juli 2010 14:31
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 ;-)

Verfasst: 23. Juli 2010 15:24
von Christian81
Und wo wird die Combobox gefüllt?

Verfasst: 23. Juli 2010 15:37
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

Verfasst: 23. Juli 2010 20:27
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:

Verfasst: 23. Juli 2010 21:28
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]

Verfasst: 23. Juli 2010 21:39
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?

Verfasst: 24. Juli 2010 09:43
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!

Verfasst: 29. Juli 2010 14:35
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. ^^