当前位置:网站首页>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。
边栏推荐
猜你喜欢
![[System Design and Implementation] Flink-based distracted driving prediction and data analysis system](/img/f0/23ac631b6eb9b794224d8ae78e6523.png)
[System Design and Implementation] Flink-based distracted driving prediction and data analysis system

MATLAB drawing command fimplicit detailed introduction to drawing implicit function graphics

C语言函数参数传递模式入门详解

深入理解Mysql索引底层数据结构与算法

1. Development community homepage, register

px和em和rem的区别

What are IPV4 and IPV6?

Introduction to MATLAB drawing functions ezplot explanation

6. Unified logging

泰伯效应.
随机推荐
Qt | 定时器的使用 QTimer
Doubled and sparse tables
求解斐波那契数列的若干方法
Unity中事件的3种实现方法
极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 插件
系统性能和TCP/UDP网络优化-学习大杂烩
仿真结果的格式&定制
word方框怎么打勾?
2. Log out, log in state examination, verification code
Ubuntu通过apt安装Mysql
Unity插件-NGUI
十天学习Unity3D脚本(一)九个回调
剑指offer:删除链表中重复的节点
Test case exercises
lua编程
如何编辑VirtualLab Fusion结果的格式
6.统一记录日志
Masters and Masters
unity Domain Reload & scene Reload 静态变量重置
MATLAB图形加标注的基本方法入门简介