[gelöst]Checkbox Tristate Status setzen

Alles rund um die Programmierung mit Qt
Antworten
peterle71
Beiträge: 6
Registriert: 31. Mai 2007 18:31

[gelöst]Checkbox Tristate Status setzen

Beitrag von peterle71 »

Hallo Qt-Gemeinde.

Kann mir jemand bei meinem Problem weiterhelfen:

Ich benutze Checkboxen als eine Tristate-Box. Den Status einer Box speichere ich in einer Datei. Beim Öffnen des Benutzerdialoges, in dem ich diese verwende, möchte ich die betreffende Checkbox mit dem aus der Datei ausgelesenen Status setzten. Dabei weiß ich nicht, welchen Status ich gerade eingelesen habe.
Nun mein problem:

Die Checkbox besitzt zwar eine Methode setState(), mit der der Status gesetzt werden könnte, sie ist allerdings protected, so daß ich auf sie nicht zugreifen kann. Außerdem erwartet sie als Eingabeparameter enum QButton::ToggleState, daß nicht ohne weiteres mit dem aus der Datei ausgelsesenen Integer-Wert belegt werden kann.

Gibt es eventuell eine andere Möglichkeit, den Status der Checkbox aus Quellcode aus zu beeinflussen?

mfg

Peterle
Zuletzt geändert von peterle71 am 1. Juni 2007 13:20, insgesamt 2-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

void QCheckBox::setCheckState ( Qt::CheckState state )
ist nicht protected...
peterle71
Beiträge: 6
Registriert: 31. Mai 2007 18:31

Beitrag von peterle71 »

Hmm, die Doku von Qt 3.3.4 sagt dazu:

void QButton::setState ( ToggleState s ) [virtual protected]
Sets the toggle state of the button to s. s can be Off, NoChange or On.


Mein code sieht so aus:

chbPwdChangeDenyPageUser->setState(QCheckBox::Off);
//Wobei chbPwdChangeDenyPageUser meine Checkbox ist

Die compiler-Meldung dazu:
error C2248: 'setState' : cannot access protected member declared in class 'QButton'
c:\qt\3.3.4-debug\include\qbutton.h(122) : see declaration of 'setState'

Was läuft da falsch?

Qt::CheckState kennt anscheinend diese Version nicht.

Kann es sein, daß es in dieser älterer Version anders ist?
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

peterle71 hat geschrieben:Hmm, die Doku von Qt 3.3.4 sagt dazu:

<snip>


Kann es sein, daß es in dieser älterer Version anders ist?

1. Solltest du erwähnen, mit welcher Qt Version du arbeitest. Wir sind alle keine Hellseher.

2. schrieb upsala weiter oben
void QCheckBox::setCheckState ( Qt::CheckState state ) ist nicht protected.
Verwechsle nicht

Code: Alles auswählen

setState()
mit

Code: Alles auswählen

setCheckState()
\Ralf
peterle71
Beiträge: 6
Registriert: 31. Mai 2007 18:31

Beitrag von peterle71 »

In dieser Version gibt es die Methode

Code: Alles auswählen

setCheckState() nicht. Daher habe ich angenommen, daß 
setState() die gleichen Funktionalitäten erfüllt.
peterle71
Beiträge: 6
Registriert: 31. Mai 2007 18:31

Beitrag von peterle71 »

Code: Alles auswählen

setCheckState()
[/quote] wäre genau die Methode, die ich bräuchte. Gibt es denn in Version 3.3.4 ein Pendant dazu?
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

peterle71 hat geschrieben: Daher habe ich angenommen, daß ...
"Annehmen" heisst auf englisch "Assume".

Bei uns gibts den Spruch "Assume makes an Ass of u and me"

:) Ralf
peterle71
Beiträge: 6
Registriert: 31. Mai 2007 18:31

Beitrag von peterle71 »

Über die Ausdrucksweisen kann man bekanntlich lang diskutieren. Bring mich allerdings bei meinem Problem nicht weiter :(
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ist die Doku so unverständlich?

Code: Alles auswählen

void QCheckBox::setChecked ( bool check )
void QCheckBox::setNoChange ()
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.
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

peterle71 hat geschrieben:Über die Ausdrucksweisen kann man bekanntlich lang diskutieren.
Es geht nicht um die Ausdrucksweise sondern die Tatsache an sich: "Annehmen" ist immer riskant, man sollte sich vergewissern.

Da bleibt dir wohl nix anderes übrig, als deine eigene Klasse von QCheckbox abzuleiten und dann dort

Code: Alles auswählen

setState()
zu implementieren:

Code: Alles auswählen

class PeterlesTristateBox : public QCheckBox
{
public:
    
    PeterlesTristateBox ( QWidget * parent, const char * name = 0 ) : QCheckBox(parent, name)
   {
      setTristate(true);
   }

     void setState ( ToggleState s )  { QCheckBox:.setState(s);}

};
peterle71
Beiträge: 6
Registriert: 31. Mai 2007 18:31

[gelöst]

Beitrag von peterle71 »

OK, Danke für die Hilfe
Antworten