Oppure

Loading
02/11/18 10:48
Thejuster
Come da titolo, non sò se sbaglio qualcosa nel procedimento,
o faccio tutto completamente in modo sbagliato.

Purtroppo le mie conoscenze del C# influiscono incredibilmente sulla stesura del codice C++.
e molte delle volte mi confondo.

il mio metodo è quello di usare il QDataStream per scrivere in modalità binaria sul file.

in primis ho una classe


mapeditor.h

 QPixmap map;
    Tileset *tileset;
    

    //structure
    struct Tile
    {
    public:
        int ID;
        int x,y,w,h;
        QRect rect;
    };


    QList<Tile> Tiles;





Successivamente, dal main effettuo questa operazione


 QString file = QFileDialog::getSaveFileName(this,
                                                tr("Seleziona il file da salvare"),"",
                                                tr("File Mappa (*.mp2d)"));
    QFile f(file);

    if(!f.open(QIODevice::WriteOnly))
    {
             
    }else
    {
        QDataStream out(&f);
        out.setVersion(QDataStream::Qt_4_8);

        //
        mapeditor *m = new mapeditor();

        m->Tiles = ui->maps->Tiles; // Applico alla nuova variabile il QList<Tile> con i valori attualmente presenti sulla mappa

        m->tileset = ui->maps->tileset; //Stesso procedimento, copio il Pixmap disponibile nella variabile temporanea.

        out << m; //Scrivo la classe su file.

        f.flush();
        f.close();


        //Test per verificare se i tiles inseriti nella nuova classe corrispondono a quelli presenti sulla mappa.
        QMessageBox::information(this,QString::number(m->Tiles.count()),tr("CONTA DEI BLOCCHI INSERITI NELLA MAPPA"),QMessageBox::Ok);

    }




Il programma mi crea il file, ma il suo pesò e di solo 1kb
Mentre il Pixmap da salvare e molto più grande, quindi credo anche i vari dati contenuti nella lista.

aprendo il file dal blocco notes, vedo unicamente un simbolo ascii e niente più.
Dov'è il problema?
mire.forumfree.it/ - Mire Engine
C# UI Designer
03/11/18 15:55
Roby94
Cosi al volo, immagino che
out << m;

non vada a serializzare la classe, ma a scrivere in out il valore di m, che è un puntatore. questo spiegherebbe perche sul tuo file trovi solo un carattere visibile. Inoltre sei tu il primo a dire che fai confusione con il C# dove ogni variabile è oggetto, e quindi puntatori e istanze non si separano mai, a differenza del C++
aaa
08/11/18 8:09
Thejuster
Roby ho fatto diversi tentativi ma ricevendo sempre erorre.

Ho creato una nuova classe da serializzare, ma qualsiasi dato che tento di inserire
al suo interno è errore

la classe è questa


#include <QRect>
#include <QList>
#include <QDataStream>
#include <QString>
#include <QDataStream>>


#ifndef MAPPYSAVER_H
#define MAPPYSAVER_H


class MappySaver
{

public:


    MappySaver();
    //structure
    struct Tile
    {
    public:
        int ID;
        int x,y,w,h;
        QRect rect;
    };


    QList<Tile> Tiles;

    QObject t;

    Tile tile;



};

//operatori da usare per la serializzazione
QDataStream &operator <<(QDataStream &stream,   const MappySaver &saver);
QDataStream &operator >>(QDataStream &stream, MappySaver &saver);



#endif // MAPPYSAVER_H



il classe è identica a quella usata come elemento nell'editor.
solo che ovviamente la classe sull'editor è basata su QWidget mentre questa è una semplice classe vuota.
con la differenza dell'overload degli operatori.

Come posso procere?

qualsiasi tenativo di passare dati dal widget alla classe mi dà errore.

potreisti farmi un esempio?
mire.forumfree.it/ - Mire Engine
C# UI Designer