QRadioButton abfragen

Alles rund um die Programmierung mit Qt
Antworten
Klausn
Beiträge: 48
Registriert: 28. Januar 2009 10:40

QRadioButton abfragen

Beitrag von Klausn »

hi zusammen,

wie bekommt man den status eines Radio Buttons raus ??

ich frage den button so ab:

while(abfrage->scanpath_1box->state()!=2)

geht das überhaupt so ??

Ich habe den leisen Verdacht, das da nicht mal was ankommt.

schonmal danke im voraus
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

http://doc.trolltech.com/4.4/qradiobutton.html

http://doc.trolltech.com/4.4/qabstractbutton.html

Man sollte das Forum erweitern, so dass man einen Beitrag nur abschicken kann, wenn man vorher die Checkbox "Ja, ich habe die Doku zu meinem Problem gelesen" angeklickt hat :roll:

Btw: Was willst du mit der while-Schleife erreichen?
Klausn
Beiträge: 48
Registriert: 28. Januar 2009 10:40

Beitrag von Klausn »

Ich will das das was in der schleife ist, nur ausgeführt wird wenn der radiobutton aktiviert ist !

Ich habe insgesamt 4 Radio-Buttons .. die aber alle eine unterschiedliche Funktionen ausführen sollen.

im übrigen vergaß ich zu erwähnen das ich nur QT3.3.3 verwende !
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Und wie kommst du aus der Schleife wieder raus wenn der RadioButton mal aktiviert ist???

Wenn die Schleife nicht mehr verlassen wird friert deine GUI ein, dann wird sich auch der Zustand des RadioButtons nicht mehr ändern...

Gruß,
Christian
Klausn
Beiträge: 48
Registriert: 28. Januar 2009 10:40

Beitrag von Klausn »

Die Austrittsanweisung hab ich hier nicht gepostet !
Ausserdem kann ich doch jederzeit mit nem break; rausspringen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Deine Endlosschleife wird sicherlich nicht funktionieren, wenn du nie in die eventloop zurückkommst, die sich darum kümmert, was gerade mit den GUI-Elementen passieren soll (z.B. clicked(), checked() usw.).

Der Qt-Way ist, dass du das clicked()-SIGNAL (oder welches du verwenden willst) mit nem SLOT verbindest, der sich dann um diese spezielle AUfgabe kümmert (lies dir dadurch ruhig die Doku + Beispiele durch...).

Wenn du WIRKLICH WIRKLICH sicher bist, dass du unbedingt das alles in ner (Endlos)Schleife machen MUSST (weil weder SIGNAL/SLOT noch QThread in Frage kommen) bau doch ein QApplication::processEvents() in die Schleife ein. Wird bei viel Rechenaufwand in deiner Schleife aber eine recht hackelige GUI hinterlassen.
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Klausn hat geschrieben:Die Austrittsanweisung hab ich hier nicht gepostet !
Ausserdem kann ich doch jederzeit mit nem break; rausspringen.
Nicht sehr elegant mit dem break.

warum nicht:
if (...state() == 2) ....
else if (...state() == 3) ...
else if (...state() == 4) ...

oder gleich einen switch nehmen.
Linux, das längste Text-Adventure aller Zeiten
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Und warum reicht dann kein einfaches:

Code: Alles auswählen

if (radioButton.isChecked())
{
   ...Mach irgendwas
}
Das führt den gewünschten Code nur dann aus wenn der RadioButton gedrückt ist, anderfalls eben nicht.

Genau wie pfid frage ich mich warum eine Schleife?

Gruß,
Christian
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Klausn hat geschrieben: im übrigen vergaß ich zu erwähnen das ich nur QT3.3.3 verwende !
http://doc.trolltech.com/3.3/qradiobutton.html
Klausn
Beiträge: 48
Registriert: 28. Januar 2009 10:40

Beitrag von Klausn »

@pfid
wie soll ich sonst ohne schleife vier radio buttons abfragen ?

jeder radiobutton soll eine andere funktion ausführen.

das hier funktioniert nicht... die schleife wird auch bei FALSE durchlaufen

if( sup->scanpath_1box->isChecked() == TRUE )
{
anweisung
}

ich denke das die abfrage des radiobuttons so nicht hinhaut.. und die Doku hab ich mittlerweile gelesen ! Trotzdem funktionierts noch nicht !
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Klausn hat geschrieben:@pfid
wie soll ich sonst ohne schleife vier radio buttons abfragen ?

jeder radiobutton soll eine andere funktion ausführen.

das hier funktioniert nicht... die schleife wird auch bei FALSE durchlaufen

if( sup->scanpath_1box->isChecked() == TRUE )
{
anweisung
}

ich denke das die abfrage des radiobuttons so nicht hinhaut.. und die Doku hab ich mittlerweile gelesen ! Trotzdem funktionierts noch nicht !
Wie willst du den Button denn sonst abfragen?
bool QRadioButton::isChecked () const

Returns TRUE if the radio button is checked; otherwise returns FALSE. See the "checked" property for details.
Soll nicht arrogant klingen, aber wenn "anweisung" ausgeführt wird, würde das entweder bedeuten dass"scanpath_1box" angekreuzt ist, oder QT wundersamerweise bei isChecked() true liefert, obwohl der Radiobutton nicht gewählt ist.

Und was hat das ganze mit Schleifen zu tun? Weil deine if-Abfrage scheinbar nicht funktioniert, baust du ne Schleife drumrum damit sie irgendwann mal funktioniert, oder wie versteh ich das?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ist eigentlich Qt-Grundlage (SIGNAL/SLOT).
Dein QRadioButton erbt von QButton. Dieser wiederum hat SIGNALS, wie clicked() oder stateChanged( int state ). Diese Signale einfach an einen SLOT hängen (connect()), der die jeweilige Aufgabe erledigt. Kannst natürlich auch das Signal eines jeden deiner 4 RadioButtons auf den gleichen SLOT legen, und da dann alle States abfragen, wenn du ganz bestimmte Aktionen nur bei bestimmten Kombinationen deiner States haben willst.
Antworten