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!
qt qdialog qnetworkaccessmanager qnetworkreply qnetworkrequest
Commentami!