Seite 1 von 1

Slot wird nie aufgerufen

Verfasst: 23. Januar 2009 18:50
von pospiech
Ich habe ein widget was periodisch einen Thread aufruft, damit dieser Werte von einem Gerät ausliest. Wenn der Thread diese Werte gesammelt hat soll über ein Signal eine Function im widget ausgelöst werden in der das widget die Werte vom Thread ausliest.

Das connect sieht so aus:

Code: Alles auswählen

void widgetPositionInformation::connectSignalSlots()
{
	if (TranslationStage)
		connect(TranslationStage, SIGNAL(positionReached()), this, SLOT(UpdateValues()));
	connect(widgetPositionInformationThreadImpl, SIGNAL(valuesReady()), this, SLOT(OnUpdateValuesReady()));
}
die Funktion OnUpdateValuesReady(); existiert und ist ein SLOT.

in widgetPositionInformationThreadImpl wird das Signal am Ende von run() ausgelöst:

Code: Alles auswählen

void widgetPositionInformationThread::run()
{
...
	emit valuesReady();
}
Das connect funktioniert und liefert auch keinen Fehler auf der Konsole, das emit wird wie erwartet aufgerufen, aber die Funktion OnUpdateValuesReady() wird niemals aufgerufen.

Was könnte der Grund sein, und wie könnte ich das debuggen?

Verfasst: 23. Januar 2009 19:33
von Christian81
Nach dem Verlassen von run() ist der Thread weg - ggf. ist das das Problem. Besser auf QThread::finished() abfragen.

Verfasst: 26. Januar 2009 11:31
von pospiech
Christian81 hat geschrieben:Nach dem Verlassen von run() ist der Thread weg - ggf. ist das das Problem. Besser auf QThread::finished() abfragen.
Habe ich ausprobiert, hat das Problem auch nicht gelöst. Der Slot wird trotzdem nie aufgerufen.

Ironischerweise funktioniert es in einem Dialog und in einem anderen nicht. In beiden wird das widget identisch eingebetet und aufgerufen.

Verfasst: 26. Januar 2009 11:37
von Christian81
Dann bitte ein kleines Testcase das das Problem nachstellt - so wüsste ich nichts weiter.

Verfasst: 26. Januar 2009 14:28
von hilefoks
Hi,

du hast aber in deinem Thread eine Event-Loop gestartet, oder?

MfG,
Hilefoks