2012-04-04 92 views
1

我正在尝试通过REST请求向我们的Web服务发送请求。首先我只将finished(QNetworkReply*)信号连接到一个插槽,但由于ssl问题,我也试图连接sslErrors(QNetworkReply*, const QList<QSslError>&)插槽,因为它的请求是https,所以它永远不可能完成。无法从QNetworkAccessManager访问Ssl错误列表

connect(&_accessManager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), 
     this, SLOT(printSslErrors(QNetworkReply*, const QList<QSslError>&))); 

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

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

心中已经尝试:

const QSslError test = errors.at(0); // error on 'test' 
QSslError test = errors.at(0); // error on 'test' 

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' 
} 

这导致:

error C2079: 'test' uses undefined class 'QSslError'
error C2440: 'initializing' : cannot convert from 'const QSslError' to 'int'

error C2027: use of undefined type 'QSslError'
error C2228: left of '.toString' must have class/struct/union

还,智能感知强调errorstest与消息:

IntelliSense: incomplete type is not allowed

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

我包括在headerfile <QSslError> ...

我一直对sslError信号非常不满,几周前我甚至无法将信号连接到任何东西,因为它“不存在”。我是我错过了一个模块或什么?

感谢您的帮助

编辑:

仍然得到错误:

Object::connect: No such signal QNetworkAccessManager::sslErrors(QNetworkReply*, const QList&)

此外,不能检查,如果我有SSL

qDebug() << QSslSocket::supportsSsl(); 

由于QSslSocket是不确定的,甚至尽管它包含在内。它必须有一些重要的东西,我想在这里错过?我需要安装一些东西吗?我在这里完全地丧失:(

回答

4

确保你的Qt是建立与SSL支持开启(并且OpenSSL的dll文件可以在PATH中找到)。

这通常是只有当你建立自己的Qt的问题(我经常会忘记这些配置选项),或者如果你使用的是Qt,而不是使用SSL来构建它(尽管我从未见过这种情况)。 (由于某些原因不能使用prebuilt binaries):

  • 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-比比皆是 - 开源-SRC-4.8.1和运行

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

  • 确保Qt的检测和启用OpenSSL的支持

  • 运行NMAKE(出一切的列表配置打印)打造的Qt本身

(修改适当地为VS的其他版本)

+0

你知道如何构建它的Windows?看过这么多的指南,他们都是不同的...... – chikuba 2012-04-10 03:13:56

0

我只是有同样的错误,并想知道为什么信号无效。如上所述,由于OpenSSL支持未启用,所以确实如此。见QNetworkAccessManager.h:144:146:

#ifndef QT_NO_OPENSSL 
    void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors); 
#endif 

即如果OpenSSL的支持已经到位时的Qt编译的信号仅声明。