【问题标题】:How to make the value of QProgressBar start from 0?如何让 QProgressBar 的值从 0 开始?
【发布时间】:2014-07-21 14:14:11
【问题描述】:

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

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

当我再次尝试显示对话框时,如何使进度条的值从 0 开始? 谢谢!

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

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

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

【问题讨论】:

  • 再次调用loadData()时XX的值是多少?如果你想让它从 0 开始,XX 必须是 0。

标签: qt qprogressbar


【解决方案1】:

在显示之前将其设置为零。

编辑: 以下代码源自发布者的问题,有效:

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

【讨论】:

  • 您能否详细说明一下 qApp->processEvents() 的需求?为什么需要它?为什么“只”每 100 次?谢谢
  • 循环的目的是造成人为的延迟,模拟某种处理。调用 processEvents() 的原因是允许处理事件队列,否则用户界面可能会冻结。没有必要在循环的每次迭代中都这样做,因此选择了 100 的间隔。这是一个完全任意的数字。
【解决方案2】:

你应该在显示之前将progressBar的值设置为0。

mProcessBarDlg->ui.progressBar->setValue(0);
mProcessBarDlg->show();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多