Ladebalken in seperatem QWidget

Alles rund um die Programmierung mit Qt
Antworten
Freddy_Kay
Beiträge: 5
Registriert: 21. April 2013 23:30

Ladebalken in seperatem QWidget

Beitrag von Freddy_Kay »

Hi Leute,

ich habe folgendes Problem: Ich habe ein QMainWindow mit dem ich eine Klasse erzeuge, die bestimmte berechnungen ausführt. Diese Rechnungen dauern immer eine weile, also möchte ich einen Ladebalken implementieren. Ich möchte auch dass dieser Ladebalken in einem neuen Fenster angezeigt wird. Ich benutze folgenden Code:

Code: Alles auswählen

Header des ProgressWindows: 
class ProgressWindow : public QWidget, public Ui::progress_window 
{ 
    Q_OBJECT 
  
public: 
    ProgressWindow(Bahnmodell *_parent = 0, Qt::WindowFlags flags = 0); 
  
}; 
  
Die Dazugehörige Source ist recht kurz, da ich das ganze mit dem QT designer erstellt hab: 
  
ProgressWindow::ProgressWindow(Bahnmodell *_parent, Qt::WindowFlags flags){ 
  
    setupUi(this); 
  
  
}
Aufgerufen wird das ganze dann innerhalb des "MainWindows":

Code: Alles auswählen

void MainWindow::startComputation(){ 
  
    ComputationClass* comp = new ComputationClass(); 
  
    Progress = new ProgressWindow(this); 
  
    Progress->progressBar->setRange(0, 100); 
  
    Progress->show(); 
  
    comp->compute(); 
  
} 
  
void MainWindow::add_progress(){ 
  
    Progress->progressBar->setValue(Progress->progressBar->value()+1); 
  
}

die add_progress() Funktion wird von der ComputationClass aufgerufen um einen Berechnungsschritt weiterzuschalten.

Das Problem ist nun, dass das Fenster mit dem ProgressBalken zwar erstellt, aber nicht wirklich angezeigt wird, bis die Berechnung vollständig abgeschlossen ist. Ich möchte dass das nun aber gleichzeitig mit der Berechnung geupdatet wird. Wie kann ich das anstellen?

Falls noch etwas fehlt, dann werd ich das gerne nachreichen.
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Ladebalken in seperatem QWidget

Beitrag von odt »

insofern Deine ComputationClass nicht "threaded" ist, im add_progress den
QApplication::processEvents( QEventLoop::ExcludeUserInputEvents, 100 );
aufrufen.
ODT Informatik GmbH, Reto Tschofenig
Antworten