我正在做一个项目,我试图通过 REST 请求向我们的网络服务发送请求。首先我只连接了 finished(QNetworkReply*)
向插槽发出信号,但由于 ssl 问题它从未完成,我也尝试连接 sslErrors(QNetworkReply*, const QList<QSslError>&)
插槽也是如此,因为请求是 https。
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
另外,IntelliSense 下划线 errors
或 test
带有消息:
IntelliSense: incomplete type is not allowed
(请注意,当我执行 errors.count()
时它不会提示)
我包括 <QSslError>
在头文件中...
我一直在为 sslError 信号苦苦挣扎,几周前我什至无法将信号连接到任何东西,因为它“不存在”。我是不是缺少模块之类的东西?
谢谢你的帮助
编辑:
仍然出现错误:
Object::connect: No such signal QNetworkAccessManager::sslErrors(QNetworkReply*, const QList&)
此外,无法检查我是否有 Ssl
qDebug() << QSslSocket::supportsSsl();
因为 QSslSocket 是未定义的,即使它被包含在内。它必须是我在这里缺少的重要内容,对吗?我必须安装一些东西吗?我完全迷失在这里:(
最佳答案
确保您的 Qt 构建时启用了 SSL 支持(并且可以在 PATH 中找到 OpenSSL dll)。
如果您自己构建 Qt(我也经常忘记那些配置选项),或者如果您使用的是来自 linux 发行版的 Qt 而碰巧在没有 SSL 的情况下构建它(尽管我从未见过),这通常只是一个问题.
编辑: 如果您需要在 Windows 上构建它(并且由于某种原因不能使用 prebuilt binaries):
-
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适当修改)
关于c++ - 无法从 QNetworkAccessManager 访问 Ssl 错误列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004391/