QNetworkReply 未发出 downloadProgress
Posted
技术标签:
【中文标题】QNetworkReply 未发出 downloadProgress【英文标题】:downloadProgress not emitted from QNetworkReply 【发布时间】:2009-07-28 19:27:16 【问题描述】:我正在尝试使用QNetworkAccessManager
构建一个在Qt 中下载二进制文件的模块。我使用文档中详述的相同方法(见下文),但虽然我确实收到了 readyRead
信号,但 downloadProgress
永远不会到达。
一切都发生在同一个线程上(项目很大,所以我不能全部粘贴)。
有什么想法吗?
QNetworkRequest request;
request.setUrl("http://XXX.s3.amazonaws.com/XXX.exe");
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
QNetworkAccessManager * m_manager = new QNetworkAccessManager( this );
m_reply = m_manager->get(request);
m_reply->setParent(this);
connect(m_reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(m_reply, SIGNAL(downloadProgress(qint64 bytesReceived, qint64 bytesTotal)),
this, SLOT(replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)));
【问题讨论】:
你真的在readyRead上读过东西吗?发布的代码中没有任何下载... 是的,我确实读过,只是没有将其粘贴到此处。使用来自 qt 代码的浏览器示例 【参考方案1】:好的,找到了 哇,多么简单的错误。
答案是句法:
connect(m_reply, SIGNAL(downloadProgress(qint64 bytesReceived, qint64 bytesTotal)),
this, SLOT(replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)));
是一个错误
应该是:
connect(m_reply, SIGNAL(downloadProgress(qint64 , qint64 )),
this, SLOT(replyDownloadProgress(qint64 , qint64 ));
一旦我改变它,我就会收到信号。
QT 不检查其预处理器中的语法错误(自我说明)
【讨论】:
是的。但是这些错误很容易被忽略(如果你自己输出任何东西) Kitsune:我可以在 Visual Studio 上看到 stderr 吗?那会在输出窗口中吗 是的,看看输出窗口。【参考方案2】:我已经修补了我的 Qt 以使用 qFatal()
而不是 qWarning()
,因此应用程序断言而不是打印错误消息(在链接到发布构建 Qt 时无法看到)。 YMMV。
【讨论】:
以上是关于QNetworkReply 未发出 downloadProgress的主要内容,如果未能解决你的问题,请参考以下文章