c++ - 无法从 QNetworkAccessManager 访问 Ssl 错误列表

标签 c++ qt ssl undefined qnetworkaccessmanager

我正在做一个项目,我试图通过 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 下划线 errorstest带有消息:

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):

  • 下载解压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适当修改)

关于c++ - 无法从 QNetworkAccessManager 访问 Ssl 错误列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004391/

相关文章:

python - 在 QT 样式表中使用相对 url

c++ - 为 64 位 Linux 的特定 arm 目标交叉编译 Qt

python - SSLError ("Can' t 连接到 HTTPS URL,因为 SSL 模块不可用。”)在 pip 命令中

javascript - 如何让用户通过我的自定义域访问 amazon s3 html/javascript 页面?

c++ - 非成员运算符重载应该放在哪里?

c++ - 静态多态性对实现接口(interface)有意义吗?

c++ - 当您多次声明同一个对象/变量时会发生什么(新手)

c++ - 标准库容器迭代器的递增/递减迭代器是确定性的吗?

QTableWidget 中的 Qt MouseTracking

PHP 获取站点 URL 协议(protocol) - http 与 https