如何处理 QSslSocket:无法解决 TLSv1_1_client_method 错误
Posted
技术标签:
【中文标题】如何处理 QSslSocket:无法解决 TLSv1_1_client_method 错误【英文标题】:How to handle QSslSocket: cannot resolve TLSv1_1_client_method error 【发布时间】:2014-06-04 15:08:26 【问题描述】:我正在尝试开发一个可以连接到谷歌地图并使用谷歌地图 GPS 参数获取地图的程序。 所以我有一个问题,当我编译代码并单击运行按钮时,我在应用程序输出中看到这些错误:
QSslSocket:无法解析 TLSv1_1_client_method
QSslSocket:无法解析 TLSv1_2_client_method
QSslSocket:无法解析 TLSv1_1_server_method
QSslSocket:无法解析 TLSv1_2_server_method
我用谷歌搜索了很多但找不到任何答案,我也尝试安装 open-ssl v1.0.1 和 v .98 但仍然一无所获。
我的 Qt 版本:Qt Creator 3.0.1 基于 Qt 5.2.1
这是我的代码:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QString>
#include <QPixmap>
namespace Ui
class MainWindow;
class MainWindow : public QMainWindow
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void imageloaded(QNetworkReply *);
private:
Ui::MainWindow *ui;
;
#endif // MAINWINDOW_H
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
MainWindow::~MainWindow()
delete ui;
void MainWindow::on_pushButton_clicked()
QString gmurl;
gmurl = "http://maps.googleapis.com/maps/api/staticmap?center=35.704465,51.409597&zoom=16&size=600x600&sensor=false&markers=color:red%7Clabel:S%7C35.704465,51.409597" ;
QUrl url(gmurl);
QNetworkRequest request(url);
QNetworkAccessManager manager;
manager.get(request);
connect(&manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(imageloaded(QNetworkReply*)));
void MainWindow::imageloaded(QNetworkReply *reply)
QByteArray data = reply->readAll();
reply->deleteLater();
QPixmap pixmap;
pixmap.loadFromData(data);
ui->label->setPixmap(pixmap.scaled((600,600),Qt::KeepAspectRatio));
非常感谢。
【问题讨论】:
Windows、android 等? 你试过this吗? Windows,是的,我试过了,但一无所获,最后我不得不安装 Qt 5.1.0,在这个版本中没有错误,但无论如何谢谢 你也试过5.3.0吗? 是的,它有一个可以编译代码的问题,但是在运行过程中我遇到了一些错误,例如:“程序已异常完成”,也许这个版本与win7 32bit不兼容跨度> 【参考方案1】:这些警告是由 Qt(特别是 Qt 网络)在运行时加载 OpenSSL 库时打印的,但在其中找不到上述函数(可能是因为找到的 OpenSSL 库太旧)。它们本质上意味着 Qt 是使用支持 TLS v1.1、v1.2 的 OpenSSL 版本编译的,但在您的系统上找到的 OpenSSL 库仅支持最高 TLS v1.0。
警告本身并不是致命的(TLS 1.0 仍然被认为是安全的,大多数服务器都会接受它),但暗示您的应用程序捆绑了过时的 OpenSSL 库,或者依赖于在某处找到 libeay32.dll、ssleay32.dll在系统上(在 PATH 中)。
如果您想避免这些警告,可以将最新的 libeay32.dll、ssleay32.dll 与您的应用程序一起发布,或者让 Qt 静态链接到 openssl(请参阅 Qt 文档中的 Enabling and Disabling SSL Support,了解如何执行此操作) .
【讨论】:
以上是关于如何处理 QSslSocket:无法解决 TLSv1_1_client_method 错误的主要内容,如果未能解决你的问题,请参考以下文章
linux centos 7 系统,SSH无法远程连接,是啥原因,如何处理?急,在线等!