c++ - 如何从 QNetworkReply 读取数据?

标签 c++ qt windows-10 qt5 qnetworkreply

如何在 QWebPage 之前从特定 URL 的 QNetworkReply 响应中读取数据?但是当finished()发出信号 QWebPage 已读取回复,因此连接 readyRead()或调用 reply->readAll() 什么都不返回。我尝试在自己的 QWebPage 类中重载 acceptNavigationRequest() 方法,如下所示:

bool webPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type)
{
    //qDebug() << "filename = " << request.rawHeader("content-disposition");

    if(request.url().path() == QStringLiteral("download.php"))
    {
        QNetworkReply *reply = networkAccessManager()->get(request);
        QFile file;
        file.setFileName(filename);
        if(!file.open(QIODevice::ReadWrite))
        {
            /* handle error */
        }
        file.write(reply->readAll());
        file.close();
        return false;
    }

但我无法回复工作...返回的回复无效(甚至不返回 http 状态代码,我知道这意味着发送的 http 请求无效但我不知道为什么)。

欢迎使用不同的方法来解决这个问题!

最佳答案

使用带有 lambda 表达式的已完成插槽,您可以这样做:-

QNetworkReply* reply = networkAccessManager()->get(request);

connect(reply, &QNetworkReply::finished, [=]() {

    if(reply->error() == QNetworkReply::NoError)
    {
        QByteArray response = reply->readAll();
        // do something with the data...
    }
    else // handle error
    {
      qDebug(pReply->errorString());
    }
});

关于c++ - 如何从 QNetworkReply 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45852298/

相关文章:

c++ - 没有匹配的函数来调用 'connect'(QT)

Cargonizer Agent 启动时未找到 Windows 10 Java 缓存文件

path - Windows 10 - 带空格和路径的用户名

c++ - 关于 C++ 中的局部和全局静态变量

c++ - 在类外设置 const int 成员变量 (C++)

c++ - 创建 USB 隧道以连接加密狗

c++ - 在 Qt 中使用 C++ 创建 mysql 触发器

c++ - 将参数绑定(bind)到信号/槽

c++ - Berkeley DB(无法定位组件)

c# - 找不到或丢失文件