Qt - 从网站上获取图片
方法一
在Qt中,你可以使用QNetworkAccessManager来从网站上获取图片。以下是一个简单的例子,展示了如何使用Qt下载图片:
imagedownloader.h
#ifndef IMAGEDOWNLOADER_H
#define IMAGEDOWNLOADER_H
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QFile>
#include <QObject>
class ImageDownloader : public QObject
{
Q_OBJECT
public:
ImageDownloader(QNetworkAccessManager* manager, const QUrl& imageUrl, const QString& savePath): m_manager(manager), m_imageUrl(imageUrl), m_savePath(savePath)
{
connect(m_manager, &QNetworkAccessManager::finished, this, &ImageDownloader::onDownloadFinished);
QNetworkRequest request(m_imageUrl);
m_manager->get(request);
}
private slots:
void onDownloadFinished(QNetworkReply* reply)
{
if (reply->error())// 处理错误
{
qDebug() << "Download error:" << reply->errorString();
return;
}
QFile file(m_savePath);
if (!file.open(QIODevice::WriteOnly))
{
qDebug() << "Cannot open file for writing";
return;
}
file.write(reply->readAll());
file.close();
qDebug() << "Image saved to" << m_savePath;
}
private:
QNetworkAccessManager* m_manager;
QUrl m_imageUrl;
QString m_savePath;
};
#endif // IMAGEDOWNLOADER_H
main.cpp
//#include "widget.h"
#include <QApplication>
#include "imagedownloader.h"
#include <QSslSocket>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<< QSslSocket::sslLibraryBuildVersionString();
QNetworkAccessManager manager;
QUrl imageUrl("https://www.leawo.org/images/7days_prom_en.jpg"); // 替换为实际的图片URL
QString savePath = "./downloaded_image.jpg"; // 图片将被保存到的路径
ImageDownloader downloader(&manager, imageUrl, savePath);
return a.exec();
}
确保你的项目文件.pro包含了网络模块:
QT += network
在这个例子中,ImageDownloader类负责处理图片下载。它使用QNetworkAccessManager发送一个GET请求到指定的URL,并在下载完成时将图片保存到本地文件。你需要提供一个有效的图片URL和想要保存图片的文件名。
运行效果:

方法二
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void saveImage(const QString url);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
QString strUrl = QString("https://www.leawo.org/images/7days_prom_en.jpg");
saveImage(strUrl);
}
Widget::~Widget()
{
delete ui;
}
void Widget::saveImage(const QString url)
{
QNetworkRequest request(url);
QNetworkAccessManager *networkManager = new QNetworkAccessManager();
QNetworkReply *reply = networkManager->get(request);
QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();
if(reply->error() == QNetworkReply::NoError)
{
QByteArray data = reply->readAll();
QImage image = QImage::fromData(data);
image.save("./test1.png");//说明:这里是通过QImage保存图片数据,也可通过QFile来实现。
}
else
{
qDebug() << reply->errorString();
}
}
运行结果:
