Le QComboBox sono componenti grafici che corrispondono ai classici menu a tendina.

E' possibile riempire una QComboBox in diversi modi.

Oggi vediamo come riempirla da una QStringList.

Qt ha già tutti gli strumenti per eseguire il parsing di stringhe JSON.

Partendo da questo articolo, dove abbiamo visto come eseguire un richiesta ad un server remoto, vediamo come eseguire il parsing della risposta.

Se volete vedere com'è strutturato il JSON, potete accedere liberamente all'indirizzo che interroghiamo, che è questo: http://www.hardstyleitalia.com/blog/api/get_posts/?nopaging=true/

A questo punto creiamo una classe apposita che si chiamerà, con molta fantasia, JsonParser.

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.

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.

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.