我有一个对象,我希望能够读取和写入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) { ... }
是一个潜在的解决方案?我很乐意接受建议!如果需要进一步澄清,请告诉我。
答案 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);
希望它有所帮助。