return QXmlStreamWriter wechsel des enums writeOnly/readOnly

Alles rund um die Programmierung mit Qt
Antworten
kiela
Beiträge: 3
Registriert: 15. Juli 2014 13:24

return QXmlStreamWriter wechsel des enums writeOnly/readOnly

Beitrag 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();
  
}
Zuletzt geändert von kiela am 17. September 2014 13:33, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: return QXmlStreamWriter wechsel des enums writeOnly/read

Beitrag von Christian81 »

C++ - Grundlagen - wie lange lebt das QFile - Objekt und was passiert, wenn es zerstört wird?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
kiela
Beiträge: 3
Registriert: 15. Juli 2014 13:24

Re: return QXmlStreamWriter wechsel des enums writeOnly/read

Beitrag von kiela »

Ach herrje, DAS hatte ich übersehen :D

Danke
Antworten