Home / Programmazione / C - C++ / Creare un loading dialog in Qt
Mattepuffo

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!