Обновить QProgressBar из другого класса - PullRequest
0 голосов
/ 23 марта 2012

Я относительно новичок в программировании на Qt и GUI, и я немного озадачен.

Я хотел бы обновить прогресс QProgressBar так, чтобы он отражал действия, выполненные в классе. Класс выполняет много операций, и я хотел бы иметь возможность обновить QProgressBar по мере выполнения этих операций:

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

Часть, в которой я застрял, заключается в том, как наилучшим образом изо всех сил обновить QProgressBar.

Возможно, у меня возникла мысль сделать Worker класс QObject и emit обновлением при необходимости или передать объект QProgressBar классу Worker do_many_operations().

.

Любое понимание будет с благодарностью.

РЕДАКТИРОВАТЬ: Обновлено, чтобы отразить, что я имел в виду QProgressBar не QStatusBar

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Просто позвоните setValue(int), или, если у вас есть какие-либо сигналы, соедините их с setValue(int).

и, конечно, вы должны setMaximum() раньше.

0 голосов
/ 23 марта 2012

Большинство виджетов не рисуют никаких изменений, пока 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...