我正在尝试使用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)));
答案 0 :(得分: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不检查其预处理器中的语法错误(自我注意)
答案 1 :(得分:1)
我已修补我的Qt使用qFatal()
而不是qWarning()
,因此应用程序断言而不是打印错误消息(在与发布版本Qt链接时无法看到)。 YMMV。