IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

[Qt 4.4.3] QByteArray - QDataStream; utiliser << ou >> avec un type quelconque


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut [Qt 4.4.3] QByteArray - QDataStream; utiliser << ou >> avec un type quelconque
    Bonjour,

    j'ai un petit problème :

    Je suis en train de tenter de faire un peu de communication reseau sur mon programme (TCP).

    Dans le protocole déjà défini (puisque je reprends le programme), au début de chaque trame, je dois envoyer un en-tête qui est une structure.

    Ce que j'aurais voulu faire, c'est utiliser l'opérateur << comme je le fais déjà lorsque je veux faire transiter des types connus (quint8, QString ...).

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QByteArray data;
    QDataStream out(&data, QIODevice::WriteOnly);
    out << (quint16) 0;  // Fonctionne
    out << header;   // Ne fonctionne pas, header ne fait pas partie de la arguments list de QDataStream &operator
    sachant que header est une structure qui ressemble à ça :
    (Note cmdType est de type enum)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // format d entete des commandes
    typedef struct _cmdHeader
    {
        cmdType     m_stCmd; // valeur de la commande
        quint32       m_dwSize; // taille de la structure de commande
        quint32       m_dwNextCmdOffset; // position de la prochaine commande dans le cas 
                                       //  des protocoles
    } cmdHeader;

    Comment je pourrais faire sachant que de l'autre côté (côté serveur) j'aimerai aussi récupérer cette structure avec l'opérateur réciproque ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  3. #3
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    euh...c'est typiquement le genre de docs que je n'arrive pas à comprendre

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    il faut que tu définisse les fonctions
    QDataStream &operator<<(QDataStream &out, const MyClass &myObj);
    QDataStream &operator>>(QDataStream &in, MyClass &myObj);
    et que tu enregistre auprès de Qt
    qRegisterMetaTypeStreamOperators<MyClass>("MyClass");
    Du moins c'est ce que je comprend

  5. #5
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    C'est aussi ce que j'ai compris (et donc j'ai compris que ce n'est pas clair ). ça s'utilise uniquement avec des classes ?

    Avec ça, je n'ai encore jamais fait (en fait si mais y'a très longtemps) de surcharge d'opérateur et donc je ne suis pas à mon aise avec ça.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Kestufou Voir le message
    ça s'utilise uniquement avec des classes ?
    En c++,
    struct == classe public
    Citation Envoyé par Kestufou Voir le message
    Avec ça, je n'ai encore jamais fait (en fait si mais y'a très longtemps) de surcharge d'opérateur et donc je ne suis pas à mon aise avec ça.
    Tu peut te baser sur
    http://cpp.developpez.com/faq/cpp/?p..._polymorphique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. équivalent du couple QByteArray/QDataStream
    Par stardeath dans le forum C++
    Réponses: 7
    Dernier message: 27/07/2011, 13h53
  2. Impossible d'utiliser DISTINCT avec des types image et ntext
    Par azlinch dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2005, 17h43
  3. Réponses: 6
    Dernier message: 21/07/2005, 16h56
  4. utilisation de "LIKE" avec un type datetime dans r
    Par ericmart dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2003, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo