Je tente d'envoyer une structure via des signaux/slots entre deux threads, mes signaux/slots sont connectés correctement et j'ai pu envoyer QStrings contenant des parties de mes données, mais maintenant j'ai besoin pour envoyer le tout et Structures semblent les plus sensibles. Cependant quand j'essaye le signal n'est pas envoyé/reçu. Le problème semble être seulement avec l'envoi/réception de la structure, le traitement avant et après j'ai essayé de nombreuses façons.Qt Signal/Slots envoyer une structure complète
Je ne peux pas utiliser des pointeurs tels que here ou here car mes données sont générées trop rapidement et la mémoire est écrasée ou libérée (j'ai essayé avec des pointeurs et suppose que les références seront effectuées de la même manière). J'ai déjà ajouté Q_DECLARE_METATYPE à ma structure. Ma structure n'est qu'un petit test pour l'instant (pour être agrandi plus tard) et se trouve dans son propre fichier d'en-tête. Pourquoi mon programme ne pourrait-il pas envoyer/recevoir des structures?
#ifndef RETURNSTRUCT_H
#define RETURNSTRUCT_H
struct Datastruct
{
int markeridone;
};
Q_DECLARE_METATYPE(Datastruct);
#endif //RETURNSTRUCT_H
Toute aide est très appréciée.
J'utilise windows 7, MinGW 32bit, Qt 5.7.0, Qt Creator 4.0.3
Pourquoi oh pourquoi proposeriez-vous jamais utiliser '# define' ici? Même en C c'était inutile (vous aviez typedef)! En C++, vous êtes supposé utiliser des alias de type: 'using model_ptr = std :: shared_ptr'. Il est également tout à fait correct d'utiliser l'alias uniquement, pas le nom de type sous-jacent, tant que vous l'utilisez systématiquement partout. –
Je donnais un exemple qui ressemblait à un cas que j'avais, qui était un mal de tête à épingler, ** au cas où vous utilisez déjà # define ** - pas _suggesting_ pour utiliser #define –
Enregistrement d'un * La classe template * peut ne pas fonctionner telle quelle, vous devrez peut-être d'abord utiliser 'typedef' ou' using ', puis enregistrer l'alias. Notez également que les doubles accolades angulaires à la fin d'un type de modèle ne sont autorisées que ** C++ 11 et plus **. N'en faites pas votre habitude si vous travaillez pour d'autres projets! – iksemyonov