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强调errors或test消息:
IntelliSense:不允许使用不完整类型
(请注意,当我这样做时它不会抱怨errors.count())
我<QSslError>在头文件中包含...
我已经使用sslError信号进行了大量的讨论,几周前我甚至无法将信号连接到任何东西,因为它"不存在".我错过了一个模块或什么的?
谢谢你的帮助
编辑:
仍然得到错误:
Object :: connect:没有这样的信号QNetworkAccessManager :: sslErrors(QNetworkReply*,const QList&)
另外,无法检查我是否有Ssl
qDebug() << QSslSocket::supportsSsl();
Run Code Online (Sandbox Code Playgroud)
由于QSslSocket未定义,即使它已包含在内.它必须是一个重要的东西,我在这里失踪吧?我必须安装一些东西吗?我完全迷失在这里:(
确保您的Qt是在启用SSL支持的情况下构建的(并且可以在PATH上找到OpenSSL dll).
这通常只是一个问题,如果你自己构建Qt(我经常忘记那些配置选项),或者如果你使用Linux发行版中的Qt,碰巧没有SSL构建它(虽然我从未见过它).
编辑:如果你需要在Windows上构建它(并且由于某种原因不能使用预构建的二进制文件):
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支持(配置打印出所有内容的列表)
(适用于其他版本的VS)