Как сделать так, чтобы значение QProgressBar начиналось с 0?

В функции loadData() сначала покажите диалоговое окно с QProgressBar, а затем вызовите setValue() для базы данных прогресса на предприятии. когда значение индикатора выполнения увеличится до 100%, скройте диалоговое окно и установите значение 0.

Мой вопрос: когда я снова вхожу в функцию loadData(), после выполнения dlgo->show() значение индикатора выполнения не начинается с 0, а переходит со 100 на 0, а затем продолжается.

Что я могу сделать, чтобы значение индикатора выполнения начиналось с 0, когда я снова пытался показать диалоговое окно? Спасибо!

void loadData() {
    mProcessBarDlg->show();

    {
      mProcessBarDlg->ui.progressBar->setValue(XX);
    }

    mProcessBarDlg->hide();
    mProcessBarDlg->ui.progressBar->setValue(0);
}

2 ответа

Решение

Установите его на ноль, прежде чем показать его.

РЕДАКТИРОВАТЬ: работает следующий код, полученный из вопроса автора:

#include <qapplication.h>
#include <qdialog.h>
#include <qprogressbar.h>

QDialog *mProcessBarDlg;
QProgressBar *progressBar;

void loadData() {
    mProcessBarDlg->setValue(0);
    mProcessBarDlg->show();

    for (int i = 0; i < 100000000; ++i){
        if (i % 100 == 0){
            qApp->processEvents();
        }
    }

    {
      progressBar->setValue(50);
      for (int i = 0; i < 100000000; ++i){
        if (i % 100 == 0){
            qApp->processEvents();
        }
      }
    }

    mProcessBarDlg->hide();
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    mProcessBarDlg = new QDialog;
    progressBar = new QProgressBar(mProcessBarDlg);

    loadData();

    for (int i = 0; i < 100000000; ++i){
        if (i % 100 == 0){
            a.processEvents();
        }
    }

    loadData();

    QMetaObject::invokeMethod(&a, "quit", Qt::QueuedConnection);

    return a.exec();
}

Вы должны установить значение progressBar в 0, прежде чем показывать его.

mProcessBarDlg->ui.progressBar->setValue(0);
mProcessBarDlg->show();
Другие вопросы по тегам