如何使QProgressBar的值从0开始



在函数- loadData()中,首先,显示与QProgressBar的对话框,然后,根据业务调用进度条的setValue()。当progressbar的值增加到100%时,隐藏对话框并将其值设置为0。

我的问题是:当我再次进入loadData()函数时,在执行dlgo->show()之后,progressbar的值不是从0开始,而是从100跳到0,然后继续。

当我尝试再次显示对话框时,我能做些什么来使progressbar的值从0开始?谢谢你!

void loadData() {
    mProcessBarDlg->show();
    {
      mProcessBarDlg->ui.progressBar->setValue(XX);
    }
    mProcessBarDlg->hide();
    mProcessBarDlg->ui.progressBar->setValue(0);
}

在显示之前将其设置为零

编辑:下面的代码,来自海报的问题,可以工作:

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

相关内容

  • 没有找到相关文章

最新更新