我有一个应用程序,它具有在 Google 地图显示屏上显示叠加层的功能。为了显示地图叠加层,我的应用程序有一个对话框,用于下载描述地图的 xml 文件。xml 文件的网址可在“David Rumsey 地图集”网站上获得。地图页面
大卫·拉姆西地图集 您可以在此处单击按钮复制 WTMS 功能 XML 文件的链接; 网络地图瓦片服务 (WMTS)
在我的应用程序中,用户将 URL 粘贴到 QEditControl 中,然后将其传递给此函数:
enter code here
FileDownloader::FileDownloader(QUrl imageUrl, QObject父级):QObject(父级)
{
qDebug()<<“下载”<<imageUrl.toDisplayString();
连接(&m_WebCtrl,SIGNAL(完成(QNetworkReply)), SLOT(fileDownloaded(QNetworkReply*)));
this->imageUrl = imageUrl;
QNetworkRequest request(imageUrl);
m_WebCtrl.get(request);
}
FileDownloader 应该下载请求的 xml 文件,但是它却失败并生成以下消息:
调试:下载“https://maps.georeferencer.com/georeferences/79580f71-e50d-5267-afd1-b5f579515600/2015-05-25T18:52:26.021580Z/wmts?key=caj1mpUbIDuRGkUmcxkG&SERVICE=WMTS&REQUEST=GetCapabilities”(filedownloader.cpp:9,FileDownloader::FileDownloader(QUrl,QObject*))
警告:QSslSocket:无法解析CRYPTO_num_locks((null):0,(null))警告:QSslSocket:无法解析
CRYPTO_set_id_callback((null):0,(null))
警告:QSslSocket:无法解析CRYPTO_set_locking_callback((null):0,(null))
警告:QSslSocket:无法解析 ERR_free_strings ((null):0, (null))
警告:QSslSocket:无法解析 EVP_CIPHER_CTX_cleanup ((null):0, (null))
警告:QSslSocket:无法解析 EVP_CIPHER_CTX_init ((null):0, (null))
警告:QSslSocket:无法解析 sk_new_null ((null):0, (null))
警告:QSslSocket:无法解析 sk_push ((null):0, (null))
警告:QSslSocket:无法解析 sk_free ((null):0, (null))
警告:QSslSocket:无法解析 sk_num ((null):0, (null))
警告:QSslSocket:无法解析 sk_pop_free ((null):0, (null))
警告:QSslSocket:无法解析 sk_value ((null):0, (null))
警告: QSslSocket:无法解析 SSL_library_init ((null):0, (null))
警告:QSslSocket:无法解析 SSL_load_error_strings ((null):0, (null))
警告:QSslSocket:无法解析 SSL_get_ex_new_index ((null):0, (null))
警告:QSslSocket:无法解析 SSLv3_client_method ((null):0, (null))
警告:QSslSocket:无法解析 SSLv23_client_method ((null):0, (null))
警告:QSslSocket:无法解析 SSLv3_server_method ((null):0, (null))
警告:QSslSocket:无法解析 SSLv23_server_method ((null):0, (null))
警告:QSslSocket:无法解析 X509_STORE_CTX_get_chain ((null):0, (null))
警告:QSslSocket:无法解析OPENSSL_add_all_algorithms_noconf ((null):0, (null))
警告:QSslSocket:无法解析 OPENSSL_add_all_algorithms_conf ((null):0, (null))
警告:QSslSocket:无法解析 SSLeay ((null):0, (null))
警告:OpenSSL 版本不兼容 ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSLv23_client_method ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSL_CTX_new ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSL_library_init ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 ERR_get_error ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 ERR_get_error ((null):0,(null))
警告:QSslSocket:无法调用未解析的函数 SSLv23_client_method ((null):0,(null))
警告:QSslSocket:无法调用未解析的函数 SSL_CTX_new ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSL_library_init ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 ERR_get_error ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 ERR_get_error ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSLv23_client_method ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSL_CTX_new ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 SSL_library_init ((null):0, (null))
警告:QSslSocket:无法调用未解析的函数 ERR_get_error ((null):0,(null))
警告:QSslSocket:无法调用未解析的函数 ERR_get_error ((null):0,(null))
调试:下载失败 “https://maps.georeferencer.com/georeferences/79580f71-e50d-5267-afd1-b5f579515600/2015-05-25T18:52:26.021580Z/wmts?key=caj1mpUbIDuRGkUmcxkG&SERVICE=WMTS&REQUEST=GetCapabilities” “创建 SSL 上下文时出错()” (filedownloader.cpp:26,void FileDownloader::fileDownloaded(QNetworkReply*))
这里我要指出的是,直到几天前,此功能都按预期运行。我突然想到,问题可能出在 David Rumsey 网站上,但 Firefox 在获取 URL 时没有问题,在命令行上使用 curl 或 wget 也没有问题。由于我在 Ubuntu 20.04 上使用版本 1 OpenSSL,我将我的 ubuntu 升级到 22.04,现在有了版本 3 的 OpenSSL,问题仍然存在!我使用的 Qt 版本是 5.15.2
答案1
使用 Qt 5.15.2 而不是 5.11.3 重新编译我的应用程序解决了这个问题。