Seite 1 von 1

[gelöst] Qt 4.3 - QWizard/QWizardPage

Verfasst: 18. Juli 2007 09:51
von CSchirner
Hallo Qt-Gemeinde,

ich hab seit längerem n Problem mit dem QWizard... bzw mit der QWizardPage.

Ich habe eine WizardPage die 8 QComboBoxen, in 2 Groupboxes aufgeteilt beinhaltet


Jetzt soll der "weiter" button erst verfügbar sein, wenn in jeder ComboBoxgruppe mindestens einwas ausgewählt ist...

Laut der Dokumentation kann man das mit isCompleted() prüfen, bzw selbst implementieren...

Dies hab ich getan..

Code: Alles auswählen

bool WP_InOut::isComplete(void)
{

	unsigned int unCount = 0;

	QList<QComboBox*> comboIn = objInGroupBox->findChildren<QComboBox*>();
	foreach(QComboBox* objCombo, comboIn)
	{
		unCount += objCombo->currentText().toInt();
	}

	if(unCount == 0) return false;

	unCount = 0;

	QList<QComboBox*> comboOut = objOutGroupBox->findChildren<QComboBox*>();
	foreach(QComboBox* objCombo, comboOut)
	{
		unCount += objCombo->currentText().toInt();
	}

	if(unCount == 0) return  false;

return true;
}
und die ComboBoxen lasse ich das SIGNAL aufrufen completeChanged(), das laut doku dann isComplete prüft und bei "true" die Buttons freigibt...

connect(comboTemp, SIGNAL(currentIndexChanged(int)), this->parent(), SIGNAL(completeChanged()));


Dennoch sind meine Buttons ständig "aktiviert"....

Hab keine Idee mehr an was das liegen könnte...



Vielen Dank schonmal für eure Antworten

MFG
CSchirner[/code]

Verfasst: 18. Juli 2007 09:55
von macman
QWizard ist ganz neu, da werden nicht viele Erfahrungen mit haben. Könnte auch sein das es einfach ein Bug ist. Betrachte dich als Vorreiter und nun such den Fehler :-)

Verfasst: 18. Juli 2007 10:07
von CSchirner
Such den fehler schon länger ;D

Ich hab auch schonmal geschaut... wenn ich nen Breakpoint auf isComplete setze, wird der nicht aufgerufen...

Wenn ich mein isComplete als Slot definiere, und per connect den Comboboxen bei change den slot aufrufen lasse, wird dieser aufgerufen...

Doch das bringt mir nix... brauch dieses completeChanged für den QWizard :/

Das is ... nervig ;D

Verfasst: 18. Juli 2007 10:24
von NoobSaibot
in der Doku ist es eine const Methode.

Verfasst: 18. Juli 2007 10:37
von CSchirner
oh hups... .. warum muss das in der doku auch am ende stehen (das "const")

Trotz dem const bool isComplete(void) funktioniert es nicht...

Habe das geprüft mit einen breakpoint in der funktion isComplete(void)

Verfasst: 18. Juli 2007 10:39
von NoobSaibot
das const soll ja auch am ende stehen. die methode ist const, nicht der bool wert.

Verfasst: 18. Juli 2007 10:42
von CSchirner
nagut... überredet ;D

Verfasst: 18. Juli 2007 10:57
von NoobSaibot
und lies am besten noch die doku zu der funktion isComplete() genau durch.

Code: Alles auswählen

If you reimplement this function, make sure to emit completeChanged() whenever the value of isComplete() changes, to ensure that QWizard updates the enabled or disabled state of its buttons.

Verfasst: 18. Juli 2007 10:59
von CSchirner
Naja ich hab ja extra beim ändern der combobox (was ne änderung des isComplete nach sich zieht), das completeChanged() aufgerufen.

connect(comboTemp, SIGNAL(currentIndexChanged(int)), this, SIGNAL(completeChanged()));


Das sollte doch so passten... oder?

Verfasst: 18. Juli 2007 11:03
von NoobSaibot
ich würde es so machen wie in der doku beschrieben.

Verfasst: 18. Juli 2007 11:06
von CSchirner
Hm dann versteh ich net ganz wie die das meinen, das ichs implementieren soll :/

Verfasst: 18. Juli 2007 11:17
von NoobSaibot
wo ist das problem?

Verfasst: 18. Juli 2007 11:24
von CSchirner
Ich weiss nicht wie ich das dann implementieren soll, das die Buttons erst freigegeben werden, wenn meine Kriterien erfüllt sind...

Bzw wann das isComplete aufgerufen wird, bzw geprüft wird und wann ich das completeChanged "emitten" soll

Verfasst: 18. Juli 2007 11:28
von NoobSaibot
An sich erscheint mir dein Vorgehen schlüssig. Kann dir da leider nicht weiter helfen.

Verfasst: 18. Juli 2007 11:33
von CSchirner
okay jetzt funktionierts

bool WP_InOut::isComplete(void) const

hatte vorher const bool WP_InOut::isComplete(void)


....


mir war bisher noch nicht klar, das man wenn eine methode const ist, das dahinter schreibt... ich sollte mir das mal genauer anguggn... was mir bisher nicht bekannt :/