2012-02-01 181 views
0

大家好我有问题qprogressbar。我怎样才能让它顺利?我希望它从0到100%顺利进行。我使用它的答复变量从PHP脚本中读取数据并返回数据。我需要等待3-4秒才能获得我想要的进度条从0到100平滑的数据,而我只能从0-100瞬间获得数据。QprogressBar从0到100的秒跳,如何让它顺利

这里是我的代码:

void MainWindow::updateDataTransferProgress(qint64 bytesReceived, qint64 bytesTotal) 
{ 
    ui->progressBar->setMaximum(bytesTotal); 
    ui->progressBar->setValue(bytesReceived); 

} 

void MainWindow::Citanje_korisnika() 
{ 
    init(); 

    QUrl params; 
     params.addQueryItem("action","Citanje_korisnika"); 

     QByteArray data; 
     data.append(params.toString()); 
     data.remove(0,1); 

     QNetworkRequest request; 
     request.setUrl(url); 
     request.setHeader(QNetworkRequest::ContentTypeHeader, 
     QVariant("application/x-www-form-urlencoded")); 

     reply = manager->post(request, data); 
     connect(reply, SIGNAL(downloadProgress(qint64, qint64)),this, SLOT(updateDataTransferProgress(qint64,qint64))); 

} 

如果您需要更多code..just告诉我。

编辑2: 这里是我的代码,另一部分:

void MainWindow::init() 
{ 
    url = "http://127.0.0.1:8888/direkt_php_qt.php"; 
    manager = new QNetworkAccessManager(this); 
    // connect(manager, SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataTransferProgress(qint64,qint64))); 
    connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*))); 
} 

所以程序启动,它进入功能void MainWindow::Citanje_korisnika()第一件事,然后去void MainWindow::init()然后void MainWindow::updateDataTransferProgress(qint64 bytesReceived, qint64 bytesTotal)问题。我想让这个进度条从程序的开始顺利进行,直到他将所有数据下载到我的回复变量中。 现在我越来越显示我的表格,然后我waint 3-4秒什么都没发生,我看到我的进度条为0,并没有什么用数据填充,然后过了一段时间进度条jumpes 100%,数据显示是..所以我希望这个perios在程序从服务器加载的时候以一定的正常速度看到我的进度条从0到100。现在我只看到空白档案,然后繁荣一切。我想让这一切顺利。如果你明白我的意思。

+1

PHP在哪里? – PeeHaa 2012-02-01 13:34:58

+0

我正在从PHP脚本获取XML到应答变量中。 – 2012-02-01 13:38:38

+0

所以你只是想等待三秒钟才发布请求?或者你想等待三秒钟才能显示数据? – 2012-02-01 13:41:33

回答

1

貌似这里bytesReceived == bytesTotal而这就是为什么它的跳跃,从0到100%,立即。如果您知道bytesTotal的大小,您可以将QNetworkReply::setReadBufferSize(qint64 size)设置为bytesTotal的小数部分。至少你会有所进步。但正如在文件中提到的,这将节流下载速度,我看不出这点。

+0

感谢您的答复..你是怎么意思把这个大小变量?我只是读它并将其发送到bytesTotal?你能给我简单的例子吗?或者你想让我在connect()中做到这一点? – 2012-02-01 14:06:09

+0

'bytesReceived == bytesTotal'似乎很可能。另外,请注意,如果'QNAM'无法查询内容的长度,'bytesTotal'也可以为1。 – elmigranto 2012-02-01 14:11:11

+0

但我不明白它。当它启动时,我需要等待3-4秒..我认为post方法需要这么长时间,并与服务器 – 2012-02-01 14:13:31