Seite 1 von 1

return QXmlStreamWriter wechsel des enums writeOnly/readOnly

Verfasst: 10. September 2014 10:29
von kiela
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

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_H
main.cpp

Code: 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();
  
}

Re: return QXmlStreamWriter wechsel des enums writeOnly/read

Verfasst: 14. September 2014 11:12
von Christian81
C++ - Grundlagen - wie lange lebt das QFile - Objekt und was passiert, wenn es zerstört wird?

Re: return QXmlStreamWriter wechsel des enums writeOnly/read

Verfasst: 17. September 2014 13:32
von kiela
Ach herrje, DAS hatte ich übersehen :D

Danke