写点什么

Qt | 显示网络图片 QNetworkAccessManager

作者:YOLO.
  • 2022 年 7 月 11 日
  • 本文字数:1269 字

    阅读完需:约 4 分钟

Qt | 显示网络图片 QNetworkAccessManager

环境: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。

发布于: 刚刚阅读数: 3
用户头像

YOLO.

关注

还未添加个人签名 2022.05.06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 显示网络图片 QNetworkAccessManager_网络_YOLO._InfoQ写作社区