QNetworkAccessManager uploadProgress and QProgressBar

QNetworkAccessManager uploadProgress and QProgressBar

本文关键字:QProgressBar and uploadProgress QNetworkAccessManager      更新时间:2023-10-16

我有一个QT程序,通过使用QNetworkAccessManager的Http POST上传一组文件。一切上传都很好,但是我在连接uploadProgress和进度条时遇到了问题。

这是执行上传的代码:

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();
    }
}

调试窗口在上传时愉快地显示了许多进度,但UI直到上传结束时才更新,当它跳到100%时。

...
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

我从progressChanged()函数中缺少什么来更新UI?

你的百分比计算如下:

(a/b)*100

ab在这里都是整数类型,所以在a等于b之前,a/b的值为0

要得到你想要的行为,你可以先做乘法:

100*a/b

您还可以将整数强制转换为floatdouble(就像您在qDebug语句中所做的那样)。