用 Qt 下载文件?

Posted

技术标签:

【中文标题】用 Qt 下载文件?【英文标题】:Downloading a file with Qt? 【发布时间】:2012-12-06 16:00:02 【问题描述】:

我正在想办法让我的 Qt 浏览器应用程序可以从我们的 Web 应用程序下载 Word 文档。 Web 应用程序是用 ExtJS 编写的,当(在 Chrome 等浏览器中)用户单击“下载报告”按钮时,javascript 事件侦听器检测到该单击并打开 0px0px iframe 并下载文件。我不确定如何在 Qt 中复制此浏览器功能?

当我点击链接时,我收到"Operation canceled" 5 的网络回复?

什么类/方法最适合检索这些文件?

【问题讨论】:

只是在黑暗中拍摄:您检查了qt-project.org/doc/qt-4.8/qwebsettings.html#WebAttribute-enum 中的值吗?特别是像 JavascriptCanOpenWindows? 感谢您的提示,我现在启用了它但仍然没有效果,当我单击“下载报告”链接时操作中止。我认为这是 NetworkAccessManager 的工作,但不知道如何实现它? 【参考方案1】:

下载您需要的文件:QNetworkAccessManager 在本例中为 httpQFile 在这种情况下是 fileQNetworkReply 在这种情况下 reply 将回复与写入通过 QNetworkAccessManager 接收的字节的插槽连接,在这种情况下,插槽称为 readingReadyBytes()

所以我创建了请求并连接到我的插槽:

 const QNetworkRequest& request = QNetworkRequest(url);
 reply = http->get(request);
 QObject::connect(reply, SIGNAL(readyRead()), this,
        SLOT( readingReadyBytes() ));

然后我创建我的插槽:

 void yourClass::readingReadyBytes() 
    file->write(reply->read(reply->bytesAvailable()));
 

最后你必须保存并关闭你的文件。通常在 QNetworkAccessManager 发出 finished 信号时完成。 这就是我记得的,我认为这就是全部..

【讨论】:

以上是关于用 Qt 下载文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 QT 中下载许多文件

Qt从基于Qt示例的QThread下载文件不起作用

使用 Qt 浏览器下载 excel 文件作为附件

Qt5:下载文件而不保存到硬盘

Qt、QNetworkAccess Manager下载大文件频繁失败

Qt多线程http下载器之三:文件下载异常的处理