Перегрузка операторов QDataStream << и >> для пользовательского типа - PullRequest
6 голосов
/ 18 марта 2010

У меня есть объект, который я хотел бы иметь возможность читать и записывать в / из 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 ]

8 голосов
/ 19 марта 2010

Я думаю, что вы ответили на свой вопрос! Оператор потока

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

будет работать нормально. В реализации вы просто используете существующие операторы потока в QDataStream для сериализации отдельных битов вашего Compound. Некоторые классы Qt также определяют не-члены QDataStream операторы. QString это одно и то же, что и QList, так что похоже, что вы отсортированы!

4 голосов
/ 05 февраля 2014

Если вы хотите перегрузить оператор «extract» >>, ваша подпись должна быть:

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

Надеюсь, это поможет.

...