QprogressBar перепрыгивает от 0 до 100 в секунду, как сделать его плавным - PullRequest
0 голосов
/ 01 февраля 2012

Привет всем, у меня есть проблема с qprogressbar. Как я могу сделать это гладко? Я хочу, чтобы все прошло гладко с 0 до 100%. Я использую его с переменной reply, которая читает данные из php-скрипта и возвращает мне данные. Мне нужно подождать 3-4 секунды, чтобы получить мои данные. Я хочу, чтобы прогрессбар плавно шел от 0 до 100, а у меня мгновенно - от 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)));

}

Если вам нужно больше кода ... просто скажите мне.

РЕДАКТИРОВАТЬ 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%, и данные отображаются .. Так Я хочу, чтобы этот период во время загрузки программы с сервера наблюдал, как мой индикатор выполнения работает с 0-100 с некоторой нормальной скоростью. Теперь я вижу только пустые поля, а затем все включено. Я хочу, чтобы все прошло гладко. Если вы понимаете, о чем я.

1 Ответ

1 голос
/ 01 февраля 2012

Похоже, здесь bytesReceived == bytesTotal, и поэтому он сразу же прыгает с 0 до 100%. Если вы знаете приблизительный размер bytesTotal, вы можете установить QNetworkReply::setReadBufferSize(qint64 size) на долю bytesTotal. Чем хотя бы у тебя будет какой-то прогресс. Однако, как указано в документе, это снизит скорость загрузки, и я не вижу в этом смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...