Как отметили @rjh и @Georg, есть два разных варианта:
- Принудительная обработка событий с использованием QApplication :: processEvents () , ИЛИ
- Создать поток , который испускает сигналы, которые можно использовать для обновления индикатора выполнения
Если вы выполняете какую-либо нетривиальную обработку, я бы рекомендовал перенести обработку в поток.
Самое важное, что нужно знать о потоках, это то, что кроме основного потока GUI (который вы не запускаете и не создаете), вы никогда не сможете обновить графический интерфейс непосредственно из потока .
Последний параметр QObject :: connect () - это перечисление Qt :: ConnectionType , которое по умолчанию учитывает, участвуют ли потоки.
Таким образом, вы должны иметь возможность создать простой подкласс QThread
, который выполняет обработку:
class DataProcessingThread : public QThread
{
public:
void run();
signals:
void percentageComplete(int);
};
void MyThread::run()
{
while(data.hasMoreItems())
{
doSomeProcessing(data.nextItem())
emit percentageCompleted(computePercentageCompleted());
}
}
А потом где-нибудь в вашем коде GUI:
DataProcessingThread dataProcessor(/*data*/);
connect(dataProcessor, SIGNAL(percentageCompleted(int)), progressBar, SLOT(setValue(int));
dataProcessor.start();