效果图
在文本输入框中输入图片地址(注意前面必须是http),点击发送请求,即可显示图片,如果是https就无法解码。(如果原先的图片的链接开头是https,那么直接把s去掉即可)
.pro文件
QT += core gui network
.h文件
private slots:
void on_SF_BT_clicked();
//读取信息
void read_data(QNetworkReply *app);
private:
Ui::MainWindow *ui;
//声明一个管理对象
QNetworkAccessManager manager;
http通信是客户端与网页等已经建好的服务器通信,所以我们只需要建立客户端就行了。
全局变量中,创建一个管理对象manager
.cpp
1.点击按钮发送请求
// 发送请求
void MainWindow::on_SF_BT_clicked()
{
//ui->lineEdit->text();//获取到单行输入框的内容
// QUrl 将输入的字符串解析成http地址
QUrl url(ui->lineEdit->text());
//创建一个请求对象
QNetworkRequest request(url);
//发送请求
manager.get(request);
}
根据输入的url,创建一个请求的对象,让manager去获取这个请求对象
url(ui->lineEdit->text());把字符串编码成服务器能识别的内容。
2.关联信号
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//关联请求完毕,会发出一个信号 finished
connect(&manager,&QNetworkAccessManager::finished,this,&MainWindow::read_data);
}
当服务器收到请求后,会返回一个报文
当manager获取到请求对象时,发出finished信号,触发该窗口this,去执行rea_data这个槽函数。
3.read_data槽函数
//读取数据
void MainWindow::read_data(QNetworkReply *app)
{
QByteArray array = app->readAll();
//创建图片空间
QPixmap mmp;
mmp.loadFromData(array);
//设置图片显示的大小,让图片符合label显示框的大小
mmp = mmp.scaled(ui->label->size());
//在label中显示图片
ui->label->setPixmap(mmp);
}
用QNetworkReply *app去得到返回的报文内容
manage获得到的内容,从槽函数的参数中传进来,用一个数组去接住,
然后以图片的形式显示出来就行了。