Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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
Codice sorgente - presumibilmente C/C++
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
Codice sorgente - presumibilmente C/C++
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?
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++
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.