Creare un loading dialog in Qt

Creare un loading dialog in Qt

Oggi vediamo un semplice esempio di creazione di loading dialog in Qt.

Ribadisco che è un esempio basilare, utile come base da migliorare.

Quello che facciamo è questo:

  • al click di un bottone avvio il QDialog
  • invio una richiesta tramite HTTP
  • leggo la risposta
  • chiudo il dialog

Quindi, come primo step, aggiungete un bottone alla finestra.

Poi, procedendo con ordine, questo il file di intestazione:

// mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include
#include
#include
#include
#include
#include
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    virtual ~MainWindow();
 
private slots:
    void on_btnService_clicked();
    void jsonReady();
 
private:
    Ui::MainWindow *ui;
    QString wsUrl;
    QUrl url;
    QNetworkAccessManager *manager;
    QNetworkReply *reply;
    QDialog *pd;
};
 
#endif // MAINWINDOW_H

Questo il file di implementazione:

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    wsUrl = "http://www.hardstyleitalia.com/blog/api/get_posts/";
    url = wsUrl;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_btnService_clicked()
{
    pd = new QDialog(this);
    pd->setWindowTitle("Loading...");
    pd->setModal(true);
    pd->show();
    manager = new QNetworkAccessManager(this);
    reply = manager->get(QNetworkRequest(url));
    connect(reply, SIGNAL(finished()), this, SLOT(jsonReady()));
}

void MainWindow::jsonReady()
{
    // DO STUFF
    pd->hide();
    reply->close();
}

Anche il QDialog, come vedete, è molto basilare.

Però già così, fa quello che deve.

Enjoy!