qstring

Mattepuffo's logo
Controllo esistenza file con Qt in C++

Controllo esistenza file con Qt in C++

Oggi vediamo una piccola clase con una funzione per controllare l'esistenza di un file.

Il file lo cercheremo in più directory tanto per complicare un pò le cose.

Cominciamo con il file .h:

#ifndef CONTROLFILE_H
#define CONTROLFILE_H

#include <QFile>
#include <QStringList>

class ControlFile
{
public:
    ControlFile();
    virtual ~ControlFile();
    bool checkFile(QString file);
};

#endif // CONTROLFILE_H

Per i nostri scopi abbiamo importato i moduli QFile, che rappresenta i file, e QStringList che ci serve per costruire una lista di stringhe.

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.

Mattepuffo's logo
Da Qstring a string e viceversa

Da Qstring a string e viceversa

Quando si sviluppa con le Qt si incappa spesso in problemi incompatibilità tra le classi native del C++ e del framework.

Nel caso specifico mi sono trovato a dover fare la conversione da QString a string e viceversa.

Questo perchè ho una classe che svolge determinate operazioni al di fuori del fremwork e che ha una risultato raccolto dalla gui.

Nello specifico la classe è questa:

#include "scan.h"

#include <stdio.h>

#include <stdlib.h>

#include <string>

using std::string;

Scan::Scan()

{

}

string Scan::scanNetwork(string cmd)

{

char *buf = &cmd[0];

FILE *p = popen(buf, "r");

string s;

for (size_t count; (count = fread(buf, 1, sizeof(buf), p));)

{

s += string(buf, buf + count);

}

pclose(p);

return s;

}

La classe prende come input quanto scritto in una QTextEdit e il risultato viene visualizzato in un'altra QTextEdit.

Solo che personalmente nella classe preferisco usare le librerie standard del C++, mentre nella QMainWindow usare le classi Qt.

Vediamo quindi come fare i due passaggi.