return QXmlStreamWriter wechsel des enums writeOnly/readOnly
Verfasst: 10. September 2014 10:29
Hallo liebe Community,
ich habe eine Methode implementiert, in der ich einen XmlStreamWriter erzeuge, als QIODevice übergebe ich ein QFile mit dem QIODevice enum writeOnly.
Die Rückgabe des QXmlStreamWriters scheint zu funktionieren, jedoch ist das QIODevice plötzlich statt writeOnly readOnly bzw. "Device not open". ( zwei verschiedene Entwicklungsumgebungen, letztere war QT-Creator).
Wie kann ein solcher wechsel zustande kommen? Gibt es eine Möglichkeit diesen zu übergeben bzw. zurück zu geben ?
Bleibt nur die Möglichkeit jedes mal einen neuen QXmlStreamwriter zu erstellen und das QIODevice auf append zu setzten?
Hier der Beispielcode:
main.h
main.cpp
ich habe eine Methode implementiert, in der ich einen XmlStreamWriter erzeuge, als QIODevice übergebe ich ein QFile mit dem QIODevice enum writeOnly.
Die Rückgabe des QXmlStreamWriters scheint zu funktionieren, jedoch ist das QIODevice plötzlich statt writeOnly readOnly bzw. "Device not open". ( zwei verschiedene Entwicklungsumgebungen, letztere war QT-Creator).
Wie kann ein solcher wechsel zustande kommen? Gibt es eine Möglichkeit diesen zu übergeben bzw. zurück zu geben ?
Bleibt nur die Möglichkeit jedes mal einen neuen QXmlStreamwriter zu erstellen und das QIODevice auf append zu setzten?
Hier der Beispielcode:
main.h
Code: Alles auswählen
#ifndef MAIN_H
#define MAIN_H
#include <QXmlStreamWriter>
#include <QFile>
class test
{
public:
test();
void generateXml();
void next(QXmlStreamWriter* xmlWriter);
private:
};
#endif // MAIN_HCode: Alles auswählen
#include <QCoreApplication>
#include "main.h"
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::cout << "start" << std::endl;
test *blub = new test();
QXmlStreamWriter *testWriter;
testWriter = blub->generateXml();
blub->next( testWriter );
std::cout << "ende" << std::endl;
return a.exec();
}
test::test()
{
}
QXmlStreamWriter* test::generateXml(){
std::cout << "generateXMLQt()" << std::endl;
QFile file("C:/Users/kiegeland/Desktop/output.xml");
QXmlStreamWriter *xmlWriter;
if (!file.open(QIODevice::WriteOnly))
{
std::cout << "nein" << std::endl;
}
else
{
std::cout << "xmlWriter = new QXmlStreamWriter();" << std::endl;
xmlWriter = new QXmlStreamWriter( );
xmlWriter->setAutoFormatting(true);
xmlWriter->setAutoFormattingIndent(-1);
xmlWriter->setDevice( &file );
xmlWriter->writeStartDocument();
xmlWriter->writeComment("Auto generierte XML-Datei");
xmlWriter->writeEndElement();
xmlWriter->writeStartElement( "configuration" );
xmlWriter->writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
xmlWriter->writeEndElement();
xmlWriter->writeStartElement( "application" );
xmlWriter->writeAttribute("id", "1" );
xmlWriter->writeAttribute("name", "Beispiel" );
xmlWriter->writeAttribute("type", "Beispiel" );
xmlWriter->writeAttribute("guid", "xyz123" );
xmlWriter->writeAttribute("manufacturer", "Ich" );
xmlWriter->writeStartElement( "fenster" );
xmlWriter->writeAttribute("id", "1" );
xmlWriter->writeEndElement();
xmlWriter->writeStartElement( "activation" );
xmlWriter->writeAttribute("id", "1" );
xmlWriter->writeEndElement();
xmlWriter->writeStartElement( "errorhandling" );
xmlWriter->writeAttribute("id", "1" );
xmlWriter->writeAttribute("exception", "ignore" );
xmlWriter->writeAttribute("startup", "abort" );
xmlWriter->writeEndElement();
//xmlWriter->writeEndDocument();
//delete xmlWriter;
}
std::cout << "return" << std::endl;
return xmlWriter;
}
void test::next(QXmlStreamWriter* xmlWriter)
{
xmlWriter->writeStartElement( "view" );
xmlWriter->writeAttribute("id", "1" );
xmlWriter->writeAttribute("type", "default" );
xmlWriter->writeStartElement( "geometryy" );
xmlWriter->writeAttribute("id", "1" );
xmlWriter->writeAttribute("exception", "ignore" );
xmlWriter->writeAttribute("startup", "abort" );
xmlWriter->writeEndElement();
xmlWriter->writeEndElement();
}