Seite 1 von 1

SIGNALS und arrays

Verfasst: 17. April 2007 15:41
von dave007as
Hallo zusammen,

ich habe folgendes Problem. Momentan versuche ich ein Array zwischen zwei QGLWidgets hin und her zu senden. Der Sinn und Zweck davon sollte zunächst keine Rolle spielen.
Dazu habe ich ein SIGNAL sendArray(double M[16]) definiert , welches das Senden übernehmen soll und einen SLOT processArray(double M[16]), der das empfangene Array verarbeiten soll.

Die beiden QGLWidgets connecte ich in meiner Window.cpp via
connect(left, SIGNAL(sendArray(double[16])), right, SLOT(processArray(double[16])));

Ich habe jetzt festgestellt, dass das, was ich mit meinem SIGNAL sende, nicht mit dem übereinstimmt, was bei meinem SLOT ankommt.

Wenn also z.B
double M[16] = {1, 1, 1, ...., 1};
emit sendArray(M);

dann zeigt mir der VisualStudio Debugger beim Aufruf des SLOTS processArray(double M[16]) nur den Wert 2.6056750241814294e-308 an.

Hat irgendjemand von euch eine Idee, was ich da falsch mache?

Verfasst: 17. April 2007 16:02
von Christian81
C Array in einem Signal/Slot? Das geht bestitmmt irgendwie (und ggf. sogar so wie Du es beschrieben hast), aber QList<double> würde auf alle Fälle gehen.

Verfasst: 17. April 2007 22:19
von tachyon
Also ich würde ja eher QVector für die beschriebene Mimik nehmen. Eine Liste ist da etwas uberkandidelt.

Verfasst: 18. April 2007 09:12
von upsala

Verfasst: 19. April 2007 10:24
von dave007as
Mit der Signatur sendArray(double*) bzw. processArray(double*) funktioniert es mittlerweile.
QVector und so weiter wäre zwar einen Versuch wert gewesen, aber da ich mit ModelView Matrizen in OpenGL arbeite sind C Arrays für den Zweck einfach angebrachter.
Danke für Eure Hilfe!

Gruß,
Dave

Verfasst: 19. April 2007 10:26
von Christian81
Ich schätze mal dass bei der Normalisierung das [16] wegfällt und somit danach die Signatur nicht mehr passt. double* ist aber auch nicht wirklich type-safe. Aber Du arbeitest ja eh mit C-Arrays - da ist ja eh nichts safe und man muss genau aufpassen :)