您现在的位置是:首页 >学无止境 >QML开发避坑指南(二):加载https图像网站首页学无止境
QML开发避坑指南(二):加载https图像
简介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)小结
偶尔因为一些似是而非的理解或 思维定势 而浪费时间,所以特此备忘。
相关文档
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。