![](/img/trans.png)
[英]Qt SSl Error (QSslSocket: cannot resolve TLSv1_1_client_method)
[英]How to handle QSslSocket: cannot resolve TLSv1_1_client_method error
我正在尝试开发一个程序,可以连接到谷歌地图,并使用谷歌地图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,但仍然没有。
MY 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
Mainwindow.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));
}
非常感谢。
这些警告在运行时加载OpenSSL库时由Qt(特别是Qt网络)打印,但未在其中找到上述功能(可能是因为找到的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文档中的启用和禁用SSL支持 ,了解如何执行此操作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.