QNetworkAccessManager uploadProgress and QProgressBar
QNetworkAccessManager uploadProgress and QProgressBar
我有一个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
a
和b
在这里都是整数类型,所以在a
等于b
之前,a/b
的值为0
。
要得到你想要的行为,你可以先做乘法:
100*a/b
您还可以将整数强制转换为float
或double
(就像您在qDebug
语句中所做的那样)。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- QNetworkAccessManager uploadProgress and QProgressBar