当前位置:网站首页>Qt | 显示网络图片 QNetworkAccessManager
Qt | 显示网络图片 QNetworkAccessManager
2022-08-02 14:12:00 【华为云】
环境:VS2017+Qt5.14.2
1.添加 NetWork 模块。
下面是在 VS 中添加 NetWork 模块的流程,两个流程,任选一个就可以了。
右键项目->选择属性->选择 Qt Project Settings->Qt Modules->勾选 NetWork
点击导航栏 Qt VS Tools->选择 Qt Project Settings->Qt Modules->勾选 NetWork
Qt 网络模块提供一些实现 OSI 7 层网络模型中高层的网络协议,如 HTTP、FTP、SNMP 等,这些类主要是 QNetworkRequest、QNetworkReply、QNetworkAccessManager。
QNetworkAccessManager 类用于协调网络操作。在 QNetworkRequest 发起一个网络请求后,QNetworkAccessManager 类负责发送网络请求,创建网络相应。QNetworkReply 类表示网络请求的响应。由 QNetworkAccessManager 在发送一个网络请求后创建一个网络响应。QNetworkReply 提供的信号 finished()、readyRead()和 downloadProgress()可以检测网络响应的执行情况,执行相应操作。
2.声明 QNetworkAccessManager 成员变量。
QNetworkAccessManager m_networkManager;
QNetworkAccessManager 是 Qt 中的网络访问管理器,主要用来实现 Qt 中的网络编程。这个类允许应用程序发送网络请求和接收网络应答。
QNetworkAccessManager 类通过一个 URL 地址发起网络协议请求,也保存网络请求的信息,目前支持 HTTP、FTP 和局部文件 URLs 的下载或上传。
3.连接信号槽函数。
connect(&m_networkManager, &QNetworkAccessManager::finished, this, &Myself::OnReplyFinished);
当请求图片资源完成时,会响应 QNetworkAccessManager::finished()信号,它的请求是异步的。每当网络应答结束时都会发射这个信号。函数原型为:void finished(QNetworkReply *reply);
4.请求图片资源。
QNetworkRequest request;
request.setUrl(QUrl(“http://”));
m_networkManager.get(request);
用 get()函数来发送一个网络请求。除了 get()函数,管理器还提供了发送 HTTP POST 请求的 post()函数。
5.槽函数的实现。
void MySelf::OnReplyFinished(QNetworkReply *reply)
{
if (reply->error() == QNetworkReply::NoError)
{
QByteArray bytes = reply->readAll();
QPixmap pixmap;
pixmap.loadFromData(bytes);
//按比例将图片缩放成固定大小 pixmap = pixmap.scaled(100, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation);}reply->deleteLater();}
注: reply->deleteLater();一定要调用,否则会造成内存泄露
特别:
如果访问 Http 没有问题,而访问 Https 时图片获取失败,是因为 Https 访问需要用到 SSL 认证,而 QT 默认是不支持 SSL 认证的,所以还需要安装 OpenSSL 库:
1.打开slproweb.com/products/Wi…网页;
2.下载安装包;我下载的是: Win64 OpenSSL v1.1.1m Light 安装包,随着时间的推进,这个版本会不断更新的;
3.安装(exe 文件)到本地,并且在安装过程中选择将库安装到 OpenSSL 的安装目录(/bin)下面。
4.将 libeay32.dll 和 ssleay32.dll 文件拷贝到 Qt 中的存放有 QtNetwork4.dll 和 QtNetworkd4.dll 的文件目录下。我的路径是 D:\Qt\5.14.2\5.14.2\msvc2017_64\bin。
边栏推荐
猜你喜欢

Exotic curiosity-a solution looking - bit operations

Yolov5 official code reading - prior to transmission

Software Testing Basics (Back)

1.开发社区首页,注册

Detailed introduction to drawing complex surfaces using the plot_surface command

6.统一记录日志

饥荒联机版Mod开发——准备工具(一)

Summarize computer network super comprehensive test questions

3.用户上传头像

深入理解Mysql索引底层数据结构与算法
随机推荐
Unity-编辑器扩展(Editor)
背包问题-动态规划-理论篇
剑指offer:在O(1)时间删除链表结点
1.开发社区首页,注册
How to simulate 1/3 probability with coins, and arbitrary probability?
STM32LL library - USART interrupt to receive variable length information
Yolov5 official code reading - prior to transmission
MATLAB绘图函数fplot详解
模板系列-二分
Codeforces Round #605 (Div. 3)
开源一个golang写的游戏服务器框架
学习笔记(01):activiti6.0从入门到精通-工作流的介绍以及插件的安装
MATLAB绘图函数ezplot入门详解
Codeforces Round #605 (Div. 3)
Network Security Packet Capture
TypeScript
Based on the least squares linear regression equation coefficient estimation
二叉排序树与 set、map
Exotic curiosity-a solution looking - bit operations
golang的内存相关内容