【问题标题】:downloadProgress not emitted from QNetworkReplyQNetworkReply 未发出 downloadProgress
【发布时间】: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 代码的浏览器示例

标签: qt qt4 qtnetwork


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多