2010-03-18 115 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); 

希望它能帮助。