在函数 - loadData()中,首先,显示带有QProgressBar的对话框,然后根据业务调用进度条的setValue()。当progressbar的值增加到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);
}
答案 0 :(得分: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();
}
答案 1 :(得分:0)
您应该在显示之前将progressBar值设置为0.
mProcessBarDlg->ui.progressBar->setValue(0);
mProcessBarDlg->show();