Seite 1 von 1

Struct als Signal

Verfasst: 25. Juli 2007 09:38
von archon
Hallo,

eine kurze Frage kann ich ein Struct z.B.

Code: Alles auswählen

struct feedback
{
    uint16 response;
    uint8   cmd_id;
} feedback_struct;
als signal definieren...geht das überhaupt?

Gruss

Verfasst: 25. Juli 2007 09:59
von Christian81
Ja, das geht - die Typprüfung funktioniert nur über Strings.

Verfasst: 25. Juli 2007 10:48
von archon
Also im slot darf doch nur ein datentyp stehen oder? also z.B. &QString kann ich da einfach struct übergeben?

Hast Du vielleicht ein Beispiel?

Code: Alles auswählen

	connect ( &datalink, SIGNAL( response(struct &)), this, SLOT ( validate(struct &)));
geht nicht

Verfasst: 25. Juli 2007 10:50
von Christian81
Geht nicht ... mal wieder ne super Aussage :roll:

Was sagt die Konsole während der Laufzeit?

Verfasst: 25. Juli 2007 10:57
von archon
also anscheinend geht jetzt das connecten doch nur hab ich jetzt noch ein problem bei der deklaration des signals:

Code: Alles auswählen

signals:
		void response(const struct &);
liefert

Multiply markers at this line
-error: variable of field 'response' declared void
-error: expected ';' before '(' token

Verfasst: 25. Juli 2007 11:02
von Christian81
Können wir jetzt kein C ? Den Strukturnamen sollte man irgendwie schon angeben...

Verfasst: 25. Juli 2007 11:03
von archon
hö? bei der deklaration muss ich doch keinen namen eintragen?

Verfasst: 25. Juli 2007 11:04
von archon
was meinst du mit irgendwie?

Verfasst: 26. Juli 2007 00:23
von FloGrobosch
Also vielleicht äußere ich mich hier ja jetzt unqualifiziert, aber wenn ich eigenen Datentypen übergebe, dann doch per Name des Datentyps?!
Also in deinem Fall dann wohl "feedback_struct".

Code: Alles auswählen

QObject::connect( this, SIGNAL( bla( feedback_struct & )), that, SLOT( bla2( feedback_struct &) ) );
Das Signal sähe dann dem entsprechend auch so aus:

Code: Alles auswählen

signals:
 void bla( feedback_struct & );
Da Qt diesen Datentyp noch nicht kennt, musst du vorher wohl noch den metatype registrieren

Code: Alles auswählen

qRegisterMetaType<feedback_struct>("feedback_struct");
So mach ich das zumindest mit meinen Klassen immer...

Gruß, Flo[/code]

Verfasst: 26. Juli 2007 08:57
von NoobSaibot
im grunde hast du recht. jedoch ist der datentyp feedback und feedback_struct ist eine variable.

Verfasst: 26. Juli 2007 08:57
von archon
Ah na das hab ich nicht gewusst, soweit mal vielen Dank!

Verfasst: 26. Juli 2007 09:00
von Christian81
Bin mir nicht ganz sicher, aber qRegisterMetaType() ist dafür nicht nötig.