2010-03-18 55 views
4

的QDataStream << and >>運算符我有一個​​目的,我想能夠讀取並從操作QDataStream寫入/。標題如下:重載用於用戶定義類型

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; 
}; 

對於所有意圖和目的,類只是充當將QString和QPixmap的極少數的抽象。理想情況下,我將能夠到的QList寫入操作QDataStream,但我不完全知道如何去這樣做。

如果操作符重載是一個合適的解決方案,會寫像

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

代碼是一個潛在的解決方案嗎?我非常樂於提供建議!請讓我知道是否需要進一步澄清。

+1

「意圖和目的」 – 2012-01-09 21:10:24

回答

7

我想你已經回答了你自己的問題!流操作

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

將正常工作。在實現你只需要使用上QDataStream現有的流運營商連載你Compound的各個位。一些Qt類定義非成員QDataStream運營商了。 QString是一個,所以是QList,所以它看起來像你排序!

+0

真棒,謝謝!我能夠重載<<運算符,但是我仍然遇到了>>問題。方法簽名與上面的一樣嗎?還是會有不同的參數? – 2010-03-18 22:34:42

+0

想通了。 – 2010-03-19 11:28:19

2

如果要重載「提取」操作符>>,您的簽名必須是:

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

希望它能幫助。