2014-06-19 2 views
0

QNetworkAccessManager를 사용하여 HTTP POST를 통해 파일 세트를 업로드하는 QT 프로그램이 있습니다. 모든 것이 제대로 업로드되지만 uploadProgress와 진행 막대를 연결하는 데 문제가 있습니다. QNetworkAccessManager uploadProgress 및 QProgressBar

은 업로드 수행하는 코드이다 :

QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); 
while (numNetConn > 3) { 
    qDebug("Waiting for the number of transfers to decrease. [%d]", numNetConn); 
    QTest::qWait(500); 
} 
QNetworkReply* reply = networkManager->post(request, multiPart); 
multiPart->setParent(reply); // delete the multiPart with the reply 
connect(reply, SIGNAL(finished()), this, SLOT(onGetReply())); 
connect(reply, SIGNAL(uploadProgress(qint64, qint64)), SLOT(progressChanged(qint64, qint64))); 

void MainWindow::progressChanged(qint64 a, qint64 b) { 
    if (b > 0) { 
     qDebug() << "Uploading " << a << "/" << b << "%" << (double)a/(double)b*100.0; 
     ui->progUpload->setValue((a/b)*100); 
     qApp->processEvents(); 
    } 
} 

디버그 창 즐겁게 업로드하는 동안 진행을 많이 보여줍니다,하지만 100 %로 점프 할 때 UI 업로드의 매우 끝날 때까지 업데이트되지 않습니다 .

... 
Uploading 171606016/172918683 % 99.2409 
Uploading 171835392/172918683 % 99.3735 
Uploading 172064768/172918683 % 99.5062 
Uploading 172294144/172918683 % 99.6388 
Uploading 172523520/172918683 % 99.7715 
Uploading 172769280/172918683 % 99.9136 
Uploading 172918683/172918683 % 100 

UI를 업데이트하기 위해 progressChanged() 함수에서 누락 된 것은 무엇입니까?

답변

5

귀하의 비율 계산은 다음과 같습니다 ab에 달할 때까지, a/b0로 평가 있도록

(a/b)*100 

ab이 여기에 모두 정수 유형입니다.

원하는 동작을 얻으려면, 먼저 곱셈을 수행 할 수 있습니다

100*a/b 

당신은 또한 float 또는 double에 정수를 캐스팅 수 (당신이 당신의 qDebug 성명에서처럼).

+0

정확합니다! 내가 그걸 믿을 수 없어 ... 디버그 출력에 올바르게 표시했기 때문에. 'ui-> progUpload-> setValue (((double) a/(double) b) * 100.0);도 작동합니다. 감사! –