Qt | 显示网络图片 QNetworkAccessManager

举报
黑兔子 发表于 2022/08/02 14:05:17 2022/08/02
【摘要】 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.dll 和 ssleay32.dll 文件拷贝到 Qt 中的存放有 QtNetwork4.dll 和 QtNetworkd4.dll 的文件目录下。我的路径是 D:\Qt\5.14.2\5.14.2\msvc2017_64\bin。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。