Как сделать так, чтобы значение 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();