【问题标题】:QprogressBar is jumping from 0 to 100 in a sec, how to make it smoothQprogressBar 秒从 0 跳到 100,如何让它平滑
【发布时间】:2012-02-01 13:28:17
【问题描述】:

大家好,我对 qprogressbar 有疑问。我怎样才能使它顺利?我希望它从 0 到 100% 顺利进行。我将它与从 php 脚本读取数据并返回数据的回复变量一起使用。我需要等待 3-4 秒才能获取数据

这是我的代码:

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)));

}

如果您需要更多代码..告诉我。

编辑 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),问题是。我想让这个进度条从程序的开始顺利进行,直到他将所有数据下载到我的回复变量。 现在我正在显示我的表单,然后等待 3-4 秒没有发生任何事情,我看到我的进度条为 0 并且没有填充数据,然后在一段时间后进度条跳转到 100% 并显示数据.. 所以当程序从服务器加载时,我希望这个 perios 可以看到我的进度条以正常速度从 0-100 变化。现在我只看到空白文件,然后一切都开始了。我想让这一切顺利进行。如果你知道我的意思。

【问题讨论】:

  • 我正在从 PHP 脚本获取 XML 到回复变量中。
  • 所以您只想等待三秒钟再发布请求?还是要等待三秒钟再显示数据?
  • @denonth 好吧,这不会使您的问题成为 PHP 问题,我删除了标签。如果您认为它确实与 PHP 脚本有关(我对此表示怀疑),请发布它,将其作为一个机会提及并随意阅读标签。我们可能需要知道replymanager 是什么,尽管这可能很明显。
  • 确定我现在已经把我的问题解释得更清楚了
  • 添加 ui->ProgressBar->repaint()。真正的修复需要一个线程。

标签: c++ qt post progress-bar


【解决方案1】:

看起来像这里的bytesReceived == bytesTotal,这就是为什么它会立即从 0 跳到 100%。如果您知道bytesTotal 的近似大小,您可以将QNetworkReply::setReadBufferSize(qint64 size) 设置为bytesTotal 的分数。至少比你会进步一些。但是,正如文档中提到的那样,这会降低您的下载速度,我认为这没有任何意义。

【讨论】:

  • 感谢您的回复.. 你是什么意思把那个大小变量?我只是阅读它并将其发送到 bytesTotal?你能给我一个简单的例子吗?或者你想让我在connect()中做吗?
  • bytesReceived == bytesTotal 似乎很有可能的情况。另外请注意,如果QNAM 无法查询内容的长度,bytesTotal 也可能为 1。
  • 但我不明白..当它启动时我需要等待 3-4 秒..我认为 post 方法需要很长时间并且与服务器通信
  • 首先,您查询localhost,速度很快。其次,建立连接后不会发出downloadProgress 信号。作为documentation saysThis signal is emitted to indicate the progress of the download part
  • 但是基本上我是在执行post方法的时候下载的,因为我得到了一些结果,对吧?
猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2015-09-23
相关资源
最近更新 更多