QProgressBar上传问题

时间:2010-04-02 12:57:30

标签: c++ qt upload progress-bar

我先显示我的代码,然后解释我的问题:

...
// 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}完美的 有人知道如何解决这个问题上传吗?

2 个答案:

答案 0 :(得分:1)

看起来您正在使用QHttp而不是QNetworkAccessManager。 QHttp已被弃用,并且存在与进度信号相关的错误。

请使用http://qt.nokia.com/doc/4.7-snapshot/qnetworkreply.html#downloadProgresshttp://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%