destroyed signal und metaobjects

Alles rund um die Programmierung mit Qt
Antworten
benibela
Beiträge: 17
Registriert: 23. Januar 2009 21:22

destroyed signal und metaobjects

Beitrag von benibela »

Hallo,
kann es sein, dass die Metaobjekte im destroyed-slot nicht richtig funktionieren?
Ich versuche gerade den Inhalt einer QComboBox abzuspeichern, wenn sie gelöscht wird, aber, obwohl der übergebene Zeiger auf die ComboBox zeigt, lässt er sich nicht auf QComboBox casten. Im Slot steht:

Code: Alles auswählen

	
	printf("object name: %s\n", obj->metaObject()->className());
	QWidget* widget = qobject_cast<QWidget*>(obj);
	if (!widget) return;
	printf("     widget name: %s\n", widget->metaObject()->className());
	QComboBox* cb = qobject_cast<QComboBox*>(obj);
	if (!cb) {
		printf("no cb\n");
	}
und es ergibt:
object name: QObject
widget name: QObject
no cb
Besonders seltsam ist, dass sich das Objekt zu QWidget* casten lässt, obwohl als Klassenname QObject* zurückgegeben wird.

BeniBela
PS: mit qt4.5.3
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

"destroyed()" wird im Destruktor von QObject versendet. Die Destruktoren der abgeleiteten Klassen (z.B. QWidget un QComboBox) sind da schon durch.
Mit anderen Worten: du bist zu spät mit irgendwelchen Abfragen und musst den Zustand vorher speichern (z.B. bei jeder Änderungen in der ComboBox oder beim Schliessen des Parent-Widgets..).

hth!
Antworten