从另一个类中更新QProgressBar

时间:2012-03-23 02:36:01

标签: c++ qt

我对Qt和GUI编程比较陌生,我有点难过。

我想更新QProgressBar的进度,以便进度反映在课程中采取的操作。该课程正在进行大量操作,我希望能够根据这些操作的进度更新QProgressBar

class Worker
{
...
public:
  void do_many_operations()
  {
    ...
    quint64 total_operations = ...;
    for (...)
    {
      /* do some operations */
      ...
      /* update the progress bar */
    }
  }
}

我所坚持的部分是如何以尽可能最好的方式更新QProgressBar

我有一个想法可能是在必要时让我的Worker课程为QObjectemit更新,或者将QProgressBar对象传递给{{1 } class Worker

非常感谢任何见解。

编辑:已更新,以反映我的意思是do_many_operations()而不是QProgressBar

2 个答案:

答案 0 :(得分:0)

在Qt处理事件之前,大多数小部件都不会进行任何更改。 您应该能够调用常规QStatusBar槽方法,然后调用应用程序的processEvents方法。

void do_many_operations()
{
  /* Startup status bar */
  myStatusBar.showMessage("Beginning many operations.");
  QApplication::instance().processEvents();

  quint64 total_operations = ...;
  for (...)
  {
    /* do some operations */

    /* update the status bar (probably want a more dynamic message... */
    myStatusBar.showMessage("Doing work still");
    QApplication::instance().processEvents();
  }

  /* clear the status bar, no need to processEvents. */
  myStatusBar.clearMessage();
}

答案 1 :(得分:0)

只需致电setValue(int)即可,或者如果您有某些信号,请将其与setValue(int)联系起来。

当然,您之前必须setMaximum()