无法从QNetworkAccessManager访问Ssl错误列表

chi*_*uba 1 c++ ssl qt undefined qnetworkaccessmanager

我正在开发一个项目,我正在尝试通过REST请求向我们的Web服务发送请求.首先我只将finished(QNetworkReply*)信号连接到一个插槽,但由于ssl问题它从未完成,我也试图连接sslErrors(QNetworkReply*, const QList<QSslError>&)插槽,因为请求是https.

connect(&_accessManager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), 
        this, SLOT(printSslErrors(QNetworkReply*, const QList<QSslError>&)));
Run Code Online (Sandbox Code Playgroud)

然后在我的打印功能中,我无法以任何方式访问错误列表.

void AssetManager::printSslErrors(QNetworkReply *reply, const QList<QSslError>& errors) {
     ...
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

const QSslError test = errors.at(0); // error on 'test' 
QSslError test = errors.at(0); // error on 'test'
Run Code Online (Sandbox Code Playgroud)

要么

foreach(QSslError error, errors) {
    qDebug() << error.errorString(); // error on 'errors'
}
for(int i = 0; i < errors.count(); i++) {
     qDebug() << errors.at(i).errorString(); // error on 'errors'
}
Run Code Online (Sandbox Code Playgroud)

这导致:

错误C2079:'test'使用未定义的类'QSslError'
错误C2440:'initializing':无法从'const QSslError'转换为'int'

要么

错误C2027:使用未定义类型'QSslError'
错误C2228:'.toString' 左边必须有class/struct/union

此外,IntelliSense强调errorstest消息:

IntelliSense:不允许使用不完整类型

(请注意,当我这样做时它不会抱怨errors.count())

<QSslError>在头文件中包含...

我已经使用sslError信号进行了大量的讨论,几周前我甚至无法将信号连接到任何东西,因为它"不存在".我错过了一个模块或什么的?

谢谢你的帮助

编辑:

仍然得到错误:

Object :: connect:没有这样的信号QNetworkAccessManager :: sslErrors(QNetworkReply*,const QList&)

另外,无法检查我是否有Ssl

qDebug() << QSslSocket::supportsSsl();
Run Code Online (Sandbox Code Playgroud)

由于QSslSocket未定义,即使它已包含在内.它必须是一个重要的东西,我在这里失踪吧?我必须安装一些东西吗?我完全迷失在这里:(

Eug*_*ene 5

确保您的Qt是在启用SSL支持的情况下构建的(并且可以在PATH上找到OpenSSL dll).

这通常只是一个问题,如果你自己构建Qt(我经常忘记那些配置选项),或者如果你使用Linux发行版中的Qt,碰巧没有SSL构建它(虽然我从未见过它).

编辑:如果你需要在Windows上构建它(并且由于某种原因不能使用预构建的二进制文件):

  • 下载并将OpenSSLQt解压缩到同一个文件夹中.例如:

    c:\root\openssl-1.0.1

    c:\root\qt-everywhere-opensource-src-4.8.1

  • 启动Visual Studio命令行并运行c:\ root\openssl-1.0.1\ms\32all.bat,等待构建的东西

  • cd进入c:\ root\qt-everywhere-opensource-src-4.8.1然后运行

    configure.exe -platform win32-msvc2010 -openssl -I c:\root\openssl-1.0.1\include

  • 确保检测到Qt并启用OpenSSL支持(配置打印出所有内容的列表)

  • 运行nmake来构建Qt本身

(适用于其他版本的VS)