// xlsxdrawing.cpp #include #include #include #include #include "xlsxdrawing_p.h" #include "xlsxdrawinganchor_p.h" #include "xlsxabstractsheet.h" QT_BEGIN_NAMESPACE_XLSX Drawing::Drawing(AbstractSheet *sheet, CreateFlag flag) :AbstractOOXmlFile(flag), sheet(sheet) { workbook = sheet->workbook(); } Drawing::~Drawing() { qDeleteAll(anchors); } void Drawing::saveToXmlFile(QIODevice *device) const { relationships()->clear(); QXmlStreamWriter writer(device); writer.writeStartDocument(QStringLiteral("1.0"), true); writer.writeStartElement(QStringLiteral("xdr:wsDr")); writer.writeAttribute(QStringLiteral("xmlns:xdr"), QStringLiteral("http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing")); writer.writeAttribute(QStringLiteral("xmlns:a"), QStringLiteral("http://schemas.openxmlformats.org/drawingml/2006/main")); for (DrawingAnchor *anchor : anchors) anchor->saveToXml(writer); writer.writeEndElement();//xdr:wsDr writer.writeEndDocument(); } // check point bool Drawing::loadFromXmlFile(QIODevice *device) { /* */ QXmlStreamReader reader(device); while (!reader.atEnd()) { reader.readNextStartElement(); if (reader.tokenType() == QXmlStreamReader::StartElement) { if (reader.name() == QLatin1String("absoluteAnchor")) // CT_AbsoluteAnchor { DrawingAbsoluteAnchor * anchor = new DrawingAbsoluteAnchor(this); anchor->loadFromXml(reader); } else if (reader.name() == QLatin1String("oneCellAnchor")) // CT_OneCellAnchor { DrawingOneCellAnchor * anchor = new DrawingOneCellAnchor(this); anchor->loadFromXml(reader); } else if (reader.name() == QLatin1String("twoCellAnchor")) // CT_TwoCellAnchor { DrawingTwoCellAnchor * anchor = new DrawingTwoCellAnchor(this); anchor->loadFromXml(reader); } } } return true; } QT_END_NAMESPACE_XLSX