qt progressBar - ustawienie enabled

0

Cześć!
Oto kod:

void MainWindow::on_actioncountDispersion_triggered()
{
    ui->progressBar->setEnabled(true);

    QProgressBar *Progress = ui->progressBar;
    
    countDispersion(Osrodek, Progress);
}
 

W zamierzeniu, po wywołaniu akcji on_actioncountDispersion_triggered(), aktywować ma się progressBar, a nastepnie wskazywać postęp obliczeń w funkcji countDispersion(). Niestety, program zawiesza się do momentu zakończenia obliczeń i dopiero wtedy progressBar staje się "enabled".
Co zrobić, aby program nie zawieszał się w czasie wykonywania obliczeń? Intuicyjnie wydawało mi się, że przed wykonaniem funkcji countDispersion powinno zostać wykonane polecenie aktywowania paska postępu.

1

standardowy problem w każdym freameworku. Jak robisz długie obliczenia (inne czynności) w głównym wątku to blokujesz przetwarzanie komunikatów UI.
Rozwiązania:

  1. proste:
    wewnątrz obliczeń wywoływać od czasu do czasu QApplication::processEvents();
  2. średnie
    podzielić obliczenia na kawałki i wywoływać je od czasu do czasu (timerem lub innym zdarzeniem).
  3. trudne:
    wielowątkowość, Qt Cuncurent/QThread

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.