qlabel innerhalb qstatusbar aktualisieren

Alles rund um die Programmierung mit Qt
Antworten
biiiep
Beiträge: 5
Registriert: 20. Dezember 2006 14:18

qlabel innerhalb qstatusbar aktualisieren

Beitrag von biiiep »

Hallo,

nach einigen erfolglosen Recherchen hoffe ich das ihr mir helfen könnt.

Ich will einen label innerhalb einer statusbar aktualisieren, leider klappt die aktualisierung nicht.

Code: Alles auswählen

// hier will ich die aktualisierung anstoßen
void KOffDialog::accept() 
{
  if( minToVal() > 0)
    for(int i=minToVal(); i >= 0; i--)
    {   TimeLeft = i;
        wait();
    }
}

// hier soll der Timer 1s verweilen und dann updateTime starten, der Timer wird im Konstruktor mit refreshTimer = new Timer(this); initialisiert
// und so "connected": connect( refreshTimer, SIGNAL(timeout()), this, SLOT(updateTime()));
void KOffDialog::wait() 
{
    refreshTimer->start(1000, TRUE);
}

void KOffDialog::updateTime()
{
  labelMinLeft->setNum(TimeLeft);
  labelMinLeft->update();
  statusBar->update();
}
vielen dank schon mal für anregungen und ideen
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Ich seh da zwei Probleme:
  1. Der Aufruf von QTimer::start() führt zu keiner Verzögerung im Programmablauf, d.h. dein Programm startet zur Zeit einfach den Timer mehrmals unmittelbar hintereinander neu.
  2. Der Timer kann sein Signal erst senden wenn das Programm zur Hauptschleife zurückkehrt, d.h. in diesem Fall erst nach Verlassen von accept().
biiiep
Beiträge: 5
Registriert: 20. Dezember 2006 14:18

Beitrag von biiiep »

jo, da hast du recht.
das hab ich mir gestern nacht auch überlegt, dass es daran liegt, dass feld erst nach beenden von accept() aktualisiert wird.

dann werd ich mir mal ne andere Lösung überlegen, aber vielen Dank

gruß
biiiep
Beiträge: 5
Registriert: 20. Dezember 2006 14:18

Beitrag von biiiep »

habe das problem gelöst, indem ich den timerEvent() neuimplementiert habe. der wird dann nämlich von der hauptschleife gestartet und aktualisiert jedesmal das fenster.

;)
Antworten