Qt | 显示网络图片 QNetworkAccessManager

简介: 有事我们需要加载网络图片而非本地图片,文章介绍了qt控件显示网络图片的方法。

环境: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.dllssleay32.dll 文件拷贝到Qt中的存放有QtNetwork4.dll和QtNetworkd4.dll的文件目录下。我的路径是 D:\Qt\5.14.2\5.14.2\msvc2017_64\bin。

目录
相关文章
|
11月前
|
存储 Cloud Native Linux
C++ QT 实时进行网络监测
C++ QT 实时进行网络监测
|
3月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
499 7
|
2月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
105 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
2月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
2月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
|
5月前
|
网络协议 算法 网络性能优化
Qt TCP网络上位机的设计(通过网络编程与下位机结合)
Qt TCP网络上位机的设计(通过网络编程与下位机结合)
Qt TCP网络上位机的设计(通过网络编程与下位机结合)
|
3月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
5月前
|
网络协议 网络安全 API
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
630 1
|
5月前
|
域名解析 缓存 网络协议
探索Qt 网络编程:网络地址与服务类全解析
探索Qt 网络编程:网络地址与服务类全解析
127 0