0

我正在尝试构建一个在 Qt 中下载二进制文件的模块,使用QNetworkAccessManager. 我使用文档中详述的相同方法(见下文),但是虽然我确实收到了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)));
4

2 回答 2

2

好的发现它
哇多么简单的错误。

答案是语法:

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 不检查其预处理器中的语法错误(自我说明)

于 2009-07-28T20:42:09.000 回答
1

我已经修补了我的 Qt 以使用 aqFatal()而不是qWarning(),因此应用程序断言而不是打印错误消息(在链接到发布构建 Qt 时无法看到)。YMMV。

于 2009-07-31T05:38:40.737 回答