我先显示我的代码,然后解释我的问题:
... // somewhere in the constructor progressBar = new QProgressBar(this); progressBar->setMinimum(0); progressBar->setMaximum(100); ... connect(&http, SIGNAL(dataSendProgress(int, int)), this, SLOT(updateProgressBar(int, int))); ... void MainWindow::updateProgressBar(int bytesSent, int total) { progressBar->setMaximum(total); progressBar->setValue(bytesSent); }
所以这就是我上传文件时尝试让progressBar更新的方法。问题是,它不会完成这项工作。当它开始上传时,我将进度条的值设置为0,然后(由于这个插槽)它实际上不会显示进度,但会立即跳转到100%(甚至在完成上传之前)。
我已经检查了HTTP客户端示例,并复制了进度条部分,它用于下载,或多或少与上传相同,但它使用dataReadProgress信号(需要下载)并且它{{1}完美的 有人知道如何解决这个问题上传吗?
答案 0 :(得分:1)
看起来您正在使用QHttp而不是QNetworkAccessManager。 QHttp已被弃用,并且存在与进度信号相关的错误。
请使用http://qt.nokia.com/doc/4.7-snapshot/qnetworkreply.html#downloadProgress和http://qt.nokia.com/doc/4.7-snapshot/qnetworkreply.html#uploadProgress
进行调查答案 1 :(得分:0)
来自Qt Doc:
警告:已完成且总数不是 必须以字节为单位,因为 对于大文件,这些值可能 需要“缩放”以避免溢出。
另请参见dataReadProgress(),post(), request()和QProgressBar。
因此,如果done
(例如)以字节(例如10 B)和total
(以KB字节为单位)(比如7 kB)那么total < done
,因此progressBar变为100%