2009-07-28 7 views
0

QNetworkAccessManager을 사용하여 Qt에서 이진 파일을 다운로드하는 모듈을 빌드하려고합니다. 설명서에 설명 된 것과 동일한 방법을 사용합니다 (아래 참조). 그러나 readyRead 신호를받는 동안 downloadProgress은 도착하지 않습니다.QNetworkReply에서 다운로드 진행 없음

모든 것이 같은 스레드에서 발생합니다 (프로젝트가 너무 커서 모든 것을 붙여 넣을 수 없습니다).

아이디어가 있으십니까?

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

readyRead에서 읽은 것을 실제로 읽습니까? 게시 된 코드의 아무 것도 다운로드하지 않습니다. – Eugene

+0

네, 사실 저는 여기에 붙여 넣기를하지 않았습니다. Qt 코드의 브라우저 샘플 사용 – Lior

답변

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는 ITS PREPROCESSOR IN 구문 오류를 확인하지 않습니다 (자아 주)

+0

stderr에서 오류가 발생 했어야합니다. – Kitsune

+0

예. 그러나 그 오류를 놓치기 쉽습니다 (당신이 직접 아무것도 출력하지 않으면) – Eugene

+0

Kitsune : Visual Studio에서 stderr를 볼 수 있습니까? 출력 창에 표시됩니다. – Lior

1

나는 나의 Qt를 대신 qWarning()qFatal()를 사용하는 패치, 그래서 응용 프로그램 대신 인쇄 오류 메시지의 주장 (즉, 볼 수없는 릴리스 빌드 Qt와 링크 할 때). YMMV.

관련 문제