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

qFatal()の代わりにa を使用するように Qt にパッチを適用したqWarning()ため、アプリはエラー メッセージを出力する代わりにアサートします (リリース ビルドの Qt にリンクすると表示されません)。YMMV。

于 2009-07-31T05:38:40.737 に答える