Impostare una immagine da url in una QLabel

Mattepuffo's logo
Impostare una immagine da url in una QLabel

Impostare una immagine da url in una QLabel

In una QLabel, dovevo visualizzare una immagine da url.

Dove l'url è composto da una parte fissa, e una parte dinamica (che corrisponde all'immagine vera e propria).

Vi propongo il QWidget per intero.

Questo il file di intestazione:

#ifndef ARTICOLOIMGWINDOW_H
#define ARTICOLOIMGWINDOW_H

#include <QWidget>
#include <QUrl>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkAccessManager>

namespace Ui {
class ArticoloImgWindow;
}

class ArticoloImgWindow : public QWidget {
    Q_OBJECT

public:
    explicit ArticoloImgWindow(QString articolo, QWidget *parent = 0);
    virtual ~ArticoloImgWindow();

private slots:
    void namFinished(QNetworkReply *reply);

private:
    Ui::ArticoloImgWindow *ui;
    QNetworkAccessManager *nam;
};

#endif // ARTICOLOIMGWINDOW_H

Questo il file di implementazione:

#include "articoloimgwindow.h"
#include "ui_articoloimgwindow.h"

ArticoloImgWindow::ArticoloImgWindow(QString articolo, QWidget *parent) 
: QWidget(parent), ui(new Ui::ArticoloImgWindow) {
    ui->setupUi(this);
    this->setWindowTitle(articolo);

    nam = new QNetworkAccessManager();
    connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(namFinished(QNetworkReply*)));

    QUrl url("https://www.sito.it/IMMAGINI/" + articolo);
    QNetworkRequest request(url);
    nam->get(request);
}

void ArticoloImgWindow::namFinished(QNetworkReply *reply) {
    if (reply->error() != QNetworkReply::NoError) {
        ui->labelImg->setText("ERRORE: " + reply->errorString());
        return;
    }

    QByteArray jpegData = reply->readAll();
    QPixmap pixmap;
    pixmap.loadFromData(jpegData);
    ui->labelImg->setPixmap(pixmap);
}

ArticoloImgWindow::~ArticoloImgWindow() {
    delete nam;
    delete ui;
}

Dove il parametro articolo corrisponde all'immagine (ad esempio immagine.jpg).

Enjoy!


Condividi

Commentami!