ButtonGroup reagiert nicht auf Klicken

Alles rund um die Programmierung mit Qt
Antworten
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

ButtonGroup reagiert nicht auf Klicken

Beitrag von qtNiko »

hi,
heute habe ich gleich mehrere Probleme :(

Jetzt geht es um eine QButtonGroup mit 3 RadioButtons.
Sie werden im Constructor zur Gruppe "displayb" zusammengefasst und jeder einzeln mit dem Slot "dispArt_changed()" verbunden.

Code: Alles auswählen

Constructor:
...
displayb = new QButtonGroup(this);
	displayb->addButton(radioB_dispgw, 1);
	displayb->addButton(radioB_dispgrad, 2);
	displayb->addButton(radioB_disprichtg, 3);

connect(radioB_dispgw, SIGNAL(toggled()), this, SLOT(dispArt_changed()));
	connect(radioB_dispgrad, SIGNAL(toggled()), this, SLOT(dispArt_changed()));
	connect(radioB_disprichtg, SIGNAL(toggled()), this, SLOT(dispArt_changed()));
...
Der Slot dispArt_changed() sieht so aus:

Code: Alles auswählen

void ImgView::dispArt_changed() {

	if (displayArt != (DISP_ART)displayb->checkedId()) {
		displayArt = (DISP_ART)displayb->checkedId();
		refresh_overlays();	// malt auch das jeweilige Bild
	}
}
Wenn ich die 3 Buttons drücke, wird bei keinem dispArt_changed() aufgerufen.

Was kann das sein?
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

1. Das Signal ist falsch, es heist toggled(bool)
2. Warum verwendest du eine QButtonGroup und connectest dann doch jeden Button einzeln?
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

Tja, jetzt habe ich die 3 Statements geändert:

Code: Alles auswählen

connect(radioB_dispgw, SIGNAL(toggled(bool)), this, SLOT(dispArt_changed())); 
connect(radioB_dispgrad, SIGNAL(toggled(bool)), this, SLOT(dispArt_changed()));
	connect(radioB_disprichtg, SIGNAL(toggled(bool)), this, SLOT(dispArt_changed()));
aber die Knöpfe senden immer noch kein SIGNAL, bzw. nicht das, worauf mein Programm wartet.

Zur zweiten Frage:
Ich würde mir auch ein SIGNAL wünschen, das von der ButtonGroup immer dann gesendet wird, wenn einer der Knöpfe gedrückt wurde. Dann müsste man nur ein Signal verbinden. Damit hab ich es zuerst probiert.

Code: Alles auswählen

Im constructor:
displayb = new QButtonGroup(this);
	displayb->addButton(radioB_dispgw, 1);
	displayb->addButton(radioB_dispgrad, 2);
	displayb->addButton(radioB_disprichtg, 3);

Im Headerfile:
private slots:
    void on_displayb_buttonClicked(int id);

Im cpp-File:
void ImgView::on_displayb_buttonClicked(int id) {
  if (id == 1) ...

}
Meine Erwartung war, dass das Signal buttonClicked(int id) immer dann gesendet wird, wenn einer der Knöpfe gedrückt wird, und die Nummer des Knopfes als id mitgegeben wird.
Es hat aber nicht funktioniert, d.h. keiner der Knöpfe hat den Aufruf von on_displayb_buttonClicked(int id) bewirkt.

Stehe ich denn voll auf der Leitung?
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Die Signale sind verbunden? Es erfolgt keine Fehlermeldung auf der Konsole? Was sagt der Debugger dazu?
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

Nun, ich hatte einen Breakpoint auf die erste Zeile in "dispArt_changed()" gesetzt, der nie angesprungen wurde. Aber das meinst du wohl nicht?

Man kann doch nicht in den Qt-Bibliotheken debuggen, um zu sehen, was da drin passiert. Und wenn es möglich wäre, dann müsste ich mich in einem Riesenpaket an Code zurechtfinden, den ich noch nie gesehen habe.

Was ich nicht verstehe, ist, dass etwas, was ich schon zig-mal gemacht habe (Knöpfe mit Slots verbinden, etc.), jetzt plötzlich nicht geht. Gibt es irgendwelche Einstellungen an den Properties z.B., die verhindern, dass der Klick ein Signal veranlasst? (enabled sind die Knöpfe natürlich)
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Antworten