您现在的位置是:首页 >学无止境 >QML开发避坑指南(二):加载https图像网站首页学无止境

QML开发避坑指南(二):加载https图像

foo1st 2024-07-14 12:01:02
简介QML开发避坑指南(二):加载https图像
(1)开篇

 在qml Image组件 和 QWebEngineView组件的html文档的<img>标签,同是加载远程(https)图像,
结果前者(source属性)显示异常,后者(src属性)正常。
 问题不大,折腾不短,特此笔记,备忘。

(2)过程
(2.1)问题描述

mql代码中Image组件无法正常显示图片,而QWebEngineView组件的html文档的<img>标签可以。
查看应用程运行输出日志,有如下字样:

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
qrc:/main.qml:41:13: QML Image: TLS initialization failed

初步定位:qml框架默认不带ssl,而QWebEngine是带有的。
初步想法:找到相关 lib 放到公共路径即可。

(2.2)对策1(参考网上经验)

从Qt安装目录(Tools/mingwXXX_32/64/opt/bin)拷贝【libeay32.dll】和【ssleay32.dll】,
放入公共路径(C:/Windows/system32)。但结果 无效
(评:问题应该是ssl的版本不匹配导致,查看文件libeay32.dll的属性可知版本是1.0字样)

(2.3)对策2(参考网上经验)

 进一步了解启动过程中对ssl的检测情况,在入口添加调试:
【main.cpp】片段:

。。。
//Detect SSL lib
qDebug() << "QSslSocket::sslLibraryBuildVersion " << QSslSocket::sslLibraryBuildVersionString();
qDebug() << "QSslSocket::supportsSsl() " << QSslSocket::supportsSsl();

const QUrl url(QStringLiteral("qrc:/main.qml"));
。。。

打印输出如下:

QSslSocket::sslLibraryBuildVersion "OpenSSL 1.1.1g  21 Apr 2020"
QSslSocket::supportsSsl()  false

官网下载OpenSSL 对应版本的安装包。结果 有效
(评:对策2行之有效,靠谱)

(2.3)对策3

 笔者依据 对策2 中所依赖的openssl lib,在Qt安装目录【ToolsQtCreatorin】和
【ToolsQtDesignStudioin】中发现相关的lib:【libssl-1_1-x64.dll】和【libcrypto-1_1-x64.dll】,
直接使用。
(评:对策3可视为 对策2 的取巧,小技)

(3)小结

 偶尔因为一些似是而非的理解或 思维定势 而浪费时间,所以特此备忘。

相关文档
  1. QML开发避坑指南(一):图像资源的加载
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。