2010-03-18 12 views
4

J'ai un objet que j'aimerais lire et écrire depuis/vers un QDataStream. L'en-tête est la suivante:Surcharge du QDataStream << and >> opérateurs pour un type défini par l'utilisateur

class Compound 
{ 
public: 
    Compound(QString, QPixmap*, Ui::MainWindow*); 
    void saveCurrentInfo(); 
    void restoreSavedInfo(QGraphicsScene*); 

    void setImage(QPixmap*); 

    QString getName(); 

private: 
    QString name, homeNotes, addNotes, expText; 
    Ui::MainWindow *gui; 
    QPixmap *image;   

    struct NMRdata 
    { 
     QString hnmrText, cnmrText, hn_nmrText, hn_nmrNucl, notes; 
     int hnmrFreqIndex, cnmrFreqIndex, hn_nmrFreqIndex, 
     hnmrSolvIndex, cnmrSolvIndex, hn_nmrSolvIndex; 
    }*nmr_data; 

    struct IRdata 
    { 
     QString uvConc, lowResMethod, 
      irText, uvText, lowResText, highResText, 
      highResCalc, highResFnd, highResFrmla, 
      notes; 
    int irSolvIndex, uvSolvIndex; 
    }*ir_data; 

    struct PhysicalData 
    { 
     QString mpEdit, bpEdit, mpParensEdit, bpParensEdit, 
      rfEdit, phyText, optAlpha, 
      optConc, elemText, elemFrmla, 
      notes; 
     int phySolvIndex, optSolvIndex; 
    }*physical_data; 
}; 

Pour toutes fins utiles, la classe sert comme une abstraction pour une poignée de QString et un QPixmap. Idéalement, je serais en mesure d'écrire un QList à un QDataStream mais je ne suis pas sûr exactement comment s'y prendre.

Si la surcharge de l'opérateur est une solution adaptée, serait en train d'écrire un code comme

friend QDataStream& operator << (QDataStream&,Compound) { ... } 

être une solution potentielle? Je suis très ouvert aux suggestions! S'il vous plaît laissez-moi savoir si d'autres précisions sont nécessaires.

+1

"intentions et objectifs" –

Répondre

7

Je pense que vous avez répondu à votre propre question! L'opérateur de flux

QDataStream& operator<<(QDataStream&, const Compound&) 

fonctionnera correctement. Dans l'implémentation, vous utilisez simplement les opérateurs de flux existants sur QDataStream pour sérialiser les bits individuels de votre Compound. Certaines classes Qt définissent également des opérateurs non membres QDataStream. QString en fait partie, tout comme QList, donc on dirait que vous êtes triés!

+0

Génial, merci! J'ai été capable de surcharger l'opérateur <<, mais j'ai toujours des problèmes avec le >>. La signature de la méthode serait-elle la même que ci-dessus ou aura-t-elle des paramètres différents? –

+0

compris. –

2

Si vous voulez surcharger l'opérateur "extrait" >>, votre signature doit être:

QDataStream & operator >> (QDataStream & in, MyClass & class); 

Hope it helps.