Seite 1 von 1

QThread - eigenes SIGNAL funktioniert nicht

Verfasst: 14. Juni 2018 13:38
von Gruwe
Hallo,

ich habe folgendes Problem:

Ich habe in meinem Programm, in welchem ich eine von QThread abgeleitete Klasse eingefügt habe. Der Thread wird von dem Programm gestartet (nach Klick auf Button), läuft dann in Endlos-Schleife und frägt Daten ab (von einer angeschlossenen Hardware). Der Thread läuft erstmal so lange, bis er vom Programm (auch wieder Button-Signal) beendet wird. Das funktioniert alles wunderbar!

Nun kann der Fall auftreten, dass etwa die Verbindung zur angeschlossenen Hardware abbricht (oder eben andere unerwünschte Zustände). Hierzu liefert die Bibliothek eine passende Methode. Bei jedem Schleifendurchlauf wird die Methode aufgerufen. Ist die Antwort der Methode korrekt (kein Fehlerzustand), wird der eigentliche Code ausgeführt. Wird ein anderer Wert zurückliefern, so soll das Programm innerhalb dessen meine QThread-Instanz läuft, den QThread beenden und die Fehlerbearbeitung durchführen.

Mein Code hierzu sieht wie folgt aus:

CarThread.h

Code: Alles auswählen

class CarThread : public QThread
{
Q_OBJECT

public:
	CarThread( QWidget* );
	
private:
	QWidget *parent;
...

signals:
	void On_ErrorStatus();

CarThread.cpp

Code: Alles auswählen

CarThread::CarThread( QWidget *parentPointer)
{
	parent = parentPointer;
	QObject::connect( this, SIGNAL( On_ErrorStatus() ), parent, SLOT( SetConnectionUnready() ) );
}


void CarThread::ReadFromHardware()
{
	if( GetStatus( ) == OK )
	{
		ReadData();
	}
	else
	{
		emit On_ErrorStatus();
	}
}
Das sind so die Code-Schnipsel, die ich hierfür als notwendig erachte!

Als Fehlermeldung während des Build-Vorgangs erhalte ich: "Error: Class declaration lacks Q_OBJECT macro."

Habe jetzt schon 2 Stunden im Netz gesucht und probiert...leider führt nix zum Ergebnis!

Hat hier irgendwer ne Idee, woran das Problem liegen könnte?
Schmeiss ich den Code für das Signal raus, läufts wunderbar!

MfG und Danke

Re: QThread - eigenes SIGNAL funktioniert nicht

Verfasst: 14. Juni 2018 17:49
von Christian81
Abgesehen vom Compiler-Fehler würde ich sagen Du solltest Dir erstmal die QThread Doku anschauen denn das was Du da machst kann m.E. nicht wirklich funktionieren...
http://doc.qt.io/qt-5/qthread.html#details

Und für den Fehler - bitte die komplette Fehlermeldung - man sieht hier nicht auf welche Klasse sich der Fehler bezieht usw.