c++ - QNetworkAccessManager uploadProgress 和 QProgressBar

标签 c++ qt

<分区>

我有一个 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

我在更新 UI 的 progressChanged() 函数中缺少什么?

最佳答案

您的百分比计算是:

(a/b)*100

ab 都是整数类型,所以直到 a 等于 ba/b 的计算结果为 0

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

100*a/b

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

关于c++ - QNetworkAccessManager uploadProgress 和 QProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310804/

相关文章:

c++ - QStringList 到 QList<QStandardItem *>

C++线程性能

c++ - QGraphicsScene/View 比例理解

c++ - VS中的VTK和QT调试

c++ - 当 GUI 线程在 Qt 中空闲时发出信号?

c++ - 在使用 const 成员通过引用传递时尝试引用已删除的函数

c++ - 如何在不写入任何内容的情况下获得 stringstream 的实际最大大小?

c++ - 无法使用 wininet 将 ZIP 文件发布到服务器

c++ - QListWidget 的 QT C++ SelectedIndex

c++ - 从 QObject 继承类中的 winsock 连接函数