重载QDataStream<<和>>用户定义类型的运算符

时间:2010-03-18 20:56:21

标签: c++ qt operator-overloading iostream

我有一个对象,我希望能够读取和写入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;   
};

对于所有意图和目的,该类只是作为少数QStrings和QPixmap的抽象。理想情况下,我可以将QList写入QDataStream,但我不确定如何执行此操作。

如果运算符重载是一个合适的解决方案,那么就会编写像

这样的代码
friend QDataStream& operator << (QDataStream&,Compound) { ... }

是一个潜在的解决方案?我很乐意接受建议!如果需要进一步澄清,请告诉我。

2 个答案:

答案 0 :(得分:8)

我想你已回答了自己的问题!流操作符

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

会正常工作。在实现中,您只需使用QDataStream上的现有流操作符来序列化Compound的各个位。一些Qt类也定义了非成员QDataStream运算符。 QString是一个,QList也是如此,所以看起来你已经排序了!

答案 1 :(得分:4)

如果你想重载&#34;提取&#34;运算符&gt;&gt;,您的签名必须是:

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

希望它有所帮助。