Seite 1 von 1

destroyed signal und metaobjects

Verfasst: 25. Juni 2010 18:59
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

Verfasst: 27. Juni 2010 20:20
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!