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"
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 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);
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
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; }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 * * Ana test; QDataStream in(ByteArrayDepuisRéseau); in >> test;
02000000 correspondant a la taille de mon vecteur (qint32) soit deux éléments qint16 valant respectivement 2600 = 38 et 8b00 = 139.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 02000000 | 2600 | 8b00
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:
qui s'affiche dans ma console de debug de qtcreator, merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2"0200000026008b00"
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:
la cela fonctionne????
Code : Sélectionner tout - Visualiser dans une fenêtre à part qint16 i = *(qint16*) response.mid(30,2).constData();
Partager