Creare file in C++ e QFileDialog

Mattepuffo's logo
Creare file in C++ e QFileDialog

Creare file in C++ e QFileDialog

Con questo articolo prendo due piccioni con una fava; vedremo sia come usare un QFileDialog per decidere dove salvare i file, sia come salvarli fisicamente usando il puro C++.

Dire di cominciare dalla parte grafica Qt.

Come componente grafico di input ho usato una QAction in modo da mettere nel menu File la classica voce Salva.

Poi ho creato una funzione dentro alla MainWindow e collegato le due (per vedere nel dettagli come si fa guardate qua):

connect(ui->actionSave, SIGNAL(triggered()), this, SLOT(saveFile()));

...........

void MainWindow::saveFile()
{
    QString filename = QFileDialog::getSaveFileName(this, tr("Save"), QDir::homePath(), tr("TXT(*.txt);;DOC(*.doc)"));
    char *cFilename = filename.toAscii().data();
    SaveResult save;
    save.saveFile(cFilename, ui->txtResult->toPlainText().toStdString());
}

Qua potete vedere la doc ufficiale relativa alla funzione getSaveFileName().

Il primo parametro indica la finestra parent.

Il secondo il titolo della finestra.

Il terzo la directory iniziale.

Il quarto i possibili filtri/formati in cui si possono salvare i file.

Sotto trasformo filename da QString a char, e questo mi serve per la mia classe personale che istanzio subito sotto.

La classe SaveResult è questa qua:

#include "saveresult.h"
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

SaveResult::SaveResult()
{
}

void SaveResult::saveFile(char *filename, string result)
{
   ofstream file;
   file.open(filename, ios::out);
   file << result;
   file.close();
}

La funzione richiede due parametri: il nome del file e il testo da scrivere.

ofstream sta per Output File Stream.

La funzione open() ci consente di creare un nuovo file; il primo parametro indica il nome del file, il secondo da la possibilità di scrivere dentro al file creato.

Alla riga sotto aggiungiamo al file il testo che ci siamo portati appresso.

Infine chiudiamo il file.


Condividi

Commentami!