如何处理QSslSocket:无法解决TLSv1_1_client_method错误
How to handle QSslSocket: cannot resolve TLSv1_1_client_method error
我正在尝试开发一个程序,可以连接到谷歌地图,并通过使用谷歌地图GPS参数获得地图。所以我有一个问题,当我编译代码并单击运行按钮时,我在应用程序输出中看到这些错误:
QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
我搜索了很多,但找不到任何答案,我也试图安装open-ssl v1.0.1和v .98,但仍然一无所获。
MY Qt version: 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));
}
这些警告是由Qt(特别是Qt Network)在运行时加载OpenSSL库时打印的,但没有在其中找到上述函数(可能是因为找到的OpenSSL库太旧了)。它们本质上意味着Qt是用支持TLS v1.1, v1.2的OpenSSL版本编译的,但是在你的系统上找到的OpenSSL库只支持TLS v1.0。
这些警告本身并不是致命的(TLS 1.0仍然被认为是安全的,大多数服务器都会接受它),但这是一个暗示,你的应用程序捆绑了过时的OpenSSL库,或者依赖于在系统的某个地方(在PATH中)找到libay32 .dll, ssleay32.dll。
如果你想避免这些警告,要么在你的应用程序中附带最近的libay32 .dll, ssleay32.dll,或者让Qt在openssl中静态链接(参见Qt文档中如何做到这一点的启用和禁用SSL支持)。
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?