http图片信息获取通过QPixmap提供的成员函数loadFromData从请求返回的数据中构造QPixmap对象。
代码如下:
httppicture.h
#ifndef HTTPPICTURE_H
#define HTTPPICTURE_H
#include <QMainWindow>
#include <QtNetwork>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
QT_BEGIN_NAMESPACE
namespace Ui {
class HttpPicture; }
QT_END_NAMESPACE
class HttpPicture : public QMainWindow
{
Q_OBJECT
public:
HttpPicture(QWidget *parent = nullptr);
~HttpPicture();
private slots:
void on_pushButton_clicked();
void readdata_slot(QNetworkReply *reply);
private:
Ui::HttpPicture *ui;
QNetworkAccessManager *manager; //Http管理对象
};
#endif // HTTPPICTURE_H
httppicture.c
#include "httppicture.h"
#include "ui_httppicture.h"
HttpPicture::HttpPicture(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::HttpPicture)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this);
//连接请求完成和读取数据的槽
QObject::connect(manager,&QNetworkAccessManager::finished,this,&HttpPicture::readdata_slot);
}
HttpPicture::~HttpPicture()
{
delete ui;
}
void HttpPicture::on_pushButton_clicked()
{
//获取url
QUrl url(ui->lineEdit->text());
//创建http请求
QNetworkRequest request(url);
//发送http请求 ----- GET
manager->get(request);
}
//获取请求返回的数据
void HttpPicture::readdata_slot(QNetworkReply *reply)
{
QByteArray arr = reply->readAll();
//把图片数据放入QPixmap对象
QPixmap map;
//从指定位置导入数据到QPixmap
map.loadFromData(arr);
//显示图片
map = map.scaled(ui->label->size());
ui->label->setPixmap(map);
}
运行结果:
编译环境windows10,+ QT5.12.0
完整代码:https://download.csdn.net/download/weixin_43793181/13115721
编译时如果出现错误:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
1.首先确定你选择打开工程的编译器是64位还是32位,确定方法如下(构建套件一栏):
2.去QtCreator的安装目录,搜索ssleay32.dll和libeay32.dll,找到mingw730_64路径下的文件
3.然后把它们放到你生成的可执行文件目录,再次运行,该错误消失。