QCheckBox: Immer nur eins sollte checked sein

Alles rund um die Programmierung mit Qt
Antworten
Condemned
Beiträge: 16
Registriert: 7. Mai 2008 19:03
Kontaktdaten:

QCheckBox: Immer nur eins sollte checked sein

Beitrag von Condemned »

hi leutz, also wie der titel schon sagt möchte ich das von drei checkboxen immer nur eine anklickbar ist.

Code: Alles auswählen

 void MathoMadaja::CheckBoxen()
 {
	if ( taeglich->setCheckState( Qt::Checked ) )
	{
			woechentlich->setCheckState( Qt::Unchecked );
			monatlich->setCheckState( Qt::Unchecked ); 	
	}

	if ( woechentlich->setCheckState( Qt::Checked ) )
	{
			taeglich->setCheckState( Qt::Unchecked ); 
			monatlich->setCheckState( Qt::Unchecked ); 
	}

	if ( monatlich->setCheckState( Qt::Checked ) )
	{
			taeglich->setCheckState( Qt::Unchecked );
			woechentlich->setCheckState( Qt::Unchecked ); 
	}

 }
jetzt bekomme ich aber die meldung vom compiler das er das nicht in bool konvertieren kann.

error: could not convert `(((Ui_MathoMadaja*)this) + 20u)->Ui_MathoMadaja::taeglich->QCheckBox::setCheckState( Checked)' to `bool'

meine frage ist nun, was mache ich falsch? und kann ich das anders machen oder muss ich das zuerst in bool konvertieren.

benutzte:
Qt 4:3
und habe Windows XP SP3

danke schon mal im vorraus :D
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt!
Albert Einstein
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Kannst du überhaupt C++?

if ( woechentlich->setCheckState( Qt::Checked ) )

Was soll der Kram?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das sind nicht unbedingt fehlende C++-Kenntnisse, aber ein Blick in Doku würde das Problem auf jeden Fall sehr schnell lösen.

Mal davon abgesehen, daß wenn von 3 Zuständen nur einer angezeigt werden soll, man keine QCheckBox verwendet sondern einen QRadioButton. Außerdem nimmt die Doku von QButtonGroup noch eine Menge Arbeit ab.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

upsala hat geschrieben:Das sind nicht unbedingt fehlende C++-Kenntnisse
Wenn er "nichts" als Argument in einer Kontrollstruktur angibt, dann zeigt das schon sehr deutlich die Unwissenheit des Programmierers.
Condemned
Beiträge: 16
Registriert: 7. Mai 2008 19:03
Kontaktdaten:

Beitrag von Condemned »

ok ich kann nicht wirklich c++,noch nicht, aber könntet ihr mir vllt meine frage beantworten? die doku hilft mir ehrlich gesagt nicht unbedingt weiter, radio buttons will ich deswegen nicht weil immer ein radio button markiert bleibt.

hab hier eigentlich auf hilfe gehofft ...
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt!
Albert Einstein
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Sets the check box's check state to state.
Ok, Doku nicht gelesen, gelle? Oder wo steht da was von get?
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Die Funktion setCheckState gibt dir void wieder, also nichts. Das kannst du nicht als einen Ausdruck in einer Kontrollstruktur nutzen...
Du solltest zuerst die Sprache lernen in der du programmieren willst, bevor du ein Framework wie Qt benutzt.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QCheckBox: Immer nur eins sollte checked sein

Beitrag von macman »

Condemned hat geschrieben:hi leutz, also wie der titel schon sagt möchte ich das von drei checkboxen immer nur eine anklickbar ist.
Dann setz die anderen auf disabled, alles andere wäre nicht GUI-konform. Wenn Du es trotzdem so machen willst, dann reagier auf das itemClicked Signal, prüfe das item und setze es auf checked, wenn Bedingung erfüllt ist.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QCheckBox: Immer nur eins sollte checked sein

Beitrag von Christian81 »

macman hat geschrieben: Dann setz die anderen auf disabled, alles andere wäre nicht GUI-konform.
Und selbst das ist 'überraschend' bzw. funktioniert auch nicht wirklich - sobald eins angeklickt ist ist der Rest deaktivert und nichts geht mehr :)

Ich glaube drei Radiobuttons wären hier die Widgets der Wahl.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

Beitrag von dontinelli »

Ich glaube nicht, dass er will, dass nur eine anklickbar ist, sondern ausgewählt.

@Condemned: Lies doch einmal die Doku richtig durch! Wenn dir das nicht klar genug ist, kann ich auch nicht weiterhelfen...
Und übrigens: Auch bei QRadioButtons kannst du mit setChecked(bool) den Status setzen, ist ja beides von QAbstractButton abgeleitet.

Wenn du Neuling bist: Lerne zuerst C++ und arbeite danach das Qt-Tutorial durch, alles andere ist sinnlos.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QCheckBox: Immer nur eins sollte checked sein

Beitrag von macman »

Christian81 hat geschrieben:Ich glaube drei Radiobuttons wären hier die Widgets der Wahl.
Auf jeden Fall.
Wenn man mehrere Elemente hat, von denen nur eins anwählbar sein soll, dann muss man Radiobuttons nehmen.
Wenn eine Checkbox nicht anklickbar sein soll, dann muss man sie disabled setzen oder man spielt dem User was vor.
Ich habe eine Checkbox, die 4 Zustände annehmen kann, bei der man aber immer nur zwischen 2 Zuständen wechseln kann. Das ist dann keine Checkbox, sondern ein normales Item mit entsprechenden Icons drin :-)
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Condemned
Beiträge: 16
Registriert: 7. Mai 2008 19:03
Kontaktdaten:

Beitrag von Condemned »

Was soll der Kram?
tjo...
Die Funktion setCheckState gibt dir void wieder, also nichts
und siehe da es funktioniert mit void!

Code: Alles auswählen

void MathoMadaja::CheckBoxen_taeglich( )
 {
	 if ( taeglich->checkState( ) == Qt::Checked )
	{
		woechentlich->setCheckState( Qt::Unchecked );
		monatlich->setCheckState( Qt::Unchecked );	
	} 
	else
	{
		taeglich->setCheckState( Qt::Unchecked );
		woechentlich->setCheckState( Qt::Unchecked );
		monatlich->setCheckState( Qt::Unchecked );
	}

 }

void MathoMadaja::CheckBoxen_woechentlich()
{
	if ( woechentlich->checkState( ) == Qt::Checked )
	{
		taeglich->setCheckState( Qt::Unchecked );
		monatlich->setCheckState( Qt::Unchecked );
	}
	else
	{
		taeglich->setCheckState( Qt::Unchecked );
		woechentlich->setCheckState( Qt::Unchecked );
		monatlich->setCheckState( Qt::Unchecked );
	}

}

void MathoMadaja::CheckBoxen_monatlich()
{
	if ( monatlich->checkState( ) == Qt::Checked )
	{
		taeglich->setCheckState( Qt::Unchecked );
		woechentlich->setCheckState( Qt::Unchecked );
	}
	else
	{
		taeglich->setCheckState( Qt::Unchecked );
		woechentlich->setCheckState( Qt::Unchecked );
		monatlich->setCheckState( Qt::Unchecked );
	}
}
[sarkasmus]
danke für eure hilfe :)
[/sarkasmus][/quote]
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt!
Albert Einstein
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Jetzt benutzt checkState, was nicht void wieder gibt. Vorher hast du setCheckState in der Kontrollstruktur benutzt, was allerdings void wieder gibt.
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

und siehe da es funktioniert mit void!
Ich befürchte Du hast nicht verstanden worum es hier ging :-)

Du hast in Deinem ersten Codebeispiel das hier verwendet...

Code: Alles auswählen

if ( taeglich->setCheckState( Qt::Checked ) ) 
Üblicherweise setzen Programmiersprachen nach einem if eine "condition" voraus. Das bedeutet nach dem Auflösen des Ausdrucks muss am Ende ein boolscher Wert herauskommen.

Da "setCheckState" aber keinen Rückgabewert (void) hat, konnte Dein Code nicht funktionieren, weshalb Du von PeterLustig darauf hingewiesen wurdest.

In Deinem letzten Code hast Du es richtig gemacht...

Code: Alles auswählen

 if ( taeglich->checkState( ) == Qt::Checked )  
Du benutzt zwar trotzdem noch setCheckState, aber diesmal an der richtigen Stelle :-)

Es wäre sicher auf hilfreich gewesen den hier mehrfach vorgetragenen Rat doch einfach RadioButtons zu verwenden zu berücksichtigen, denn die machen das alles automatisch (wenn man sie z.B. in eine GroupBox einsperrt) :-)

*winke winke*
Sephral


EDIT: PeterLustig war schneller :-)
EDIT2: Viel schneller wie ich gerade sehe...hab' aber ne Ausrede, war am telefonieren :-)
Condemned
Beiträge: 16
Registriert: 7. Mai 2008 19:03
Kontaktdaten:

Beitrag von Condemned »

jo ich weiß eigentlich schon das radiobuttons besser sind, aber ich mach des im rahmen des info 2 projekts bei uns an der hochschule und da halt unser chefentwickler eben checkboxen gewollt ^^... aber finde ich gut das ihr das positiv aufgenommen habt *daumen hoch* :D
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt!
Albert Einstein
Antworten