【发布时间】: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 脚本有关(我对此表示怀疑),请发布它,将其作为一个机会提及并随意阅读标签。我们可能需要知道
reply和manager是什么,尽管这可能很明显。 -
确定我现在已经把我的问题解释得更清楚了
-
添加 ui->ProgressBar->repaint()。真正的修复需要一个线程。
标签: c++ qt post progress-bar