Bonjour,

J'ai quelques soucis avec qdatastream, QBytearray et une classe que j'ai créée:

Je vous montre le code de ma classe ".h"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
class Ana: public QObject
{
Q_OBJECT
 
public:
** *enum eAnaInput{ Wr=0, Vi=1 };
 
** *Ana(QObject *parent = 0);
** *Ana(const Ana& other);
** *void operator =(const Ana& other);
** *~Ana();
** *static void InitAnaSystem();
 
** *inline qint16 GetInput(const eAnaInput& input) *{ return _Ana[input];}
** *bool IsEmpty();
 
protected:
** *QVector<qint16> _Ana;
 
** *friend QDataStream & operator << (QDataStream &, const Ana &);
** *friend QDataStream & operator >> (QDataStream &, Ana &);
};
 
Q_DECLARE_METATYPE(Ana)
Q_ENUMS(Ana::eAnaInput)
QDataStream & operator << (QDataStream & out, const Ana & Valeur);
QDataStream & operator >> (QDataStream & in, Ana & Valeur);
le ".cpp"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "Ana.h"
 
Ana::Ana(QObject *parent):
** * * *QObject(parent)
{
 
}
 
Ana::Ana(const Ana &other)
{
** * setParent(other.parent());
** *_Ana = other._Ana;
}
 
void Ana::operator=(const Ana &other)
{
** *setParent(other.parent());
** *_Ana = other._Ana;
}
 
Ana::~Ana()
{
 
}
 
void Ana::InitAnaSystem()
{
** *qRegisterMetaTypeStreamOperators<Ana>("Ana");
** *qMetaTypeId<Ana>();****// Teste la validité de la classe Ana
}
 
bool Ana::IsEmpty()
{
** *return *_Ana.isEmpty();
}
 
QDataStream & operator << (QDataStream & out, const Ana & Valeur)
{
** *out << Valeur._Ana;
** *return out;
}
 
QDataStream & operator >> (QDataStream & in, Ana & Valeur)
{
** *in >> Valeur._Ana;
** *return in;
}
et la façon dont je dé-sérialise l'objet que je reçois depuis le réseaux:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 * *
Ana test;
QDataStream in(ByteArrayDepuisRéseau);
in >> test;
Mais mon probléme, c'est quand je fais ca cela ne fonctionne pas malgres que quand je fasse QByteArray.toHex() j'ai la bonne trame.

02000000 correspondant a la taille de mon vecteur (qint32) soit deux éléments qint16 valant respectivement 2600 = 38 et 8b00 = 139.

Je ne comprend pas moi quand je désérialise j'ai l'impression que mon QByteArray et vide mais ce n'est pas le cas.

Quelqu'un pourrait il m'aider c'est super important, merci

je précise quand je fais QByteArray::toHex j'ai plutot ca:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
"0200000026008b00"
qui s'affiche dans ma console de debug de qtcreator, merci

Autre précision ce sont des données que je recois depuis un automate et elle sont a mons avis en binaire

Quand je fais:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
qint16 i = *(qint16*) response.mid(30,2).constData();
la cela fonctionne????