Seite 1 von 1
QProgressDialog für werte > int ?
Verfasst: 6. August 2006 22:38
von Mati
Hallo allerseits,
ich habe folgendes Problem:
Ihc laufe eine schleife z.B 500 000 mal durch.
Ich habe einen ProgressDialog der diesbezüglich upgedated werden soll.
Als Maximalwert sind aber nur int - werte zugelassen für den Dialog. Ich könnte natürlich hergehen und eine if-Abfrage mit Modulo Rechnung in die Schleife hauen so dass z.B bei jedem 500sten durchlauf um eins der dialog inkrementiert wird. Das raubt mir aber in der schleife saftig Zeit. Ich brauche es eben performant.
Hat jemand ne Idee oder sehe ich vor Lauter Bäumen den Wald kaum?
Ich vermute im Moment dass ich ohne die Abfrage keine Chance habe....
Gibt es vielleicht sowas wie einen QProgressDialog wo nur hin und hergependelt wird so dass der user sieht dass was läuft?
Ich danke für jegliche Hilfe!
Verfasst: 7. August 2006 06:46
von Christian81
Ich glaube nicht dass die Modulo-Rechnung Dir die Zeit raubt sondern die 500000 Updates. Ich würde nur alle 500 - 1000 Durchläufe überhaupt den ganzen Progressbar aktualisieren.
Verfasst: 7. August 2006 19:38
von Mati
danke für die Hilfe aber ich hatte die Aktualisierung eben unter der Modulo-rechnung.
d.h eben alle 500 Durchläufe eine aktualisierung was mir enorm Zeit geraubt hat. Ich schaus mir nochmal an...
Verfasst: 7. August 2006 19:56
von Christian81
Evtl. geht ja sowas falls die Modulo - Berechnung (if ((x%1000)==0) ) doch das Problem ist
Code: Alles auswählen
for(int i = 0 ; i < 1000; i++) {
for(int j = 0 ; j < 5000; j++) {
}
updateProgress();
}
Verfasst: 7. August 2006 20:32
von Mati
danke chrisitan für die Hilfe...
leider kostet mich jeder Funktionsaufruf also sowohl ein qApp->processEvents() oder auch nur ein update() der progressDialogs immer einige 10 millisekunden Zeit. auch ein blosser pendelbalken als ProgressDialog frisst das. Die Modulo-Rechnung dagegen fast nichts...
Hat jemand vielleicht eine performante Alternative anzubieten? Evtl. ein statischer Dialog der nur eine Message anzeigt?
Würde es mit einem animierten Gif funktionieren? Ich meine so als Bild des pendelnden Balkens? Nur so ne (dumme) Frage...
Danke
Verfasst: 8. August 2006 06:34
von Christian81
Hätte ch eigentlich gestern schon erwähnen sollen - cpu-Lastige Operationen sollten in einen eigenen Thread. Dieser schickt dann per QCustomMessage (Qt3) oder signal (Qt4, wenn es geht, ansonsten QEvent) ein paar Statusinfos welche dann der Hauptthread anzeiget.
Verfasst: 8. August 2006 11:56
von uhu01
Hy!
In Qt 4 und Signals aber nicht den Parameter Qt::QueuedConnection im connect vergessen, bzw. dann das registrieren von eigenen Typen.
siehe
Qt::ConnectionType
mfg
uhu01
Verfasst: 9. August 2006 19:51
von Mati
Hallo,
vielen Dank für eure Ideen wiedermals.
Wenn ihr noch Zeit habt

und Lust habt zu antworten würde es mich wirlich interessieren ob ich es doch performant hinbekommen könnte einen QProgressDialog darzustellen.
@Christian: Denkst du über einen eigenen Thread würde es dann problemlos ohne sichtlichen Zeitverlust (evtl. im Bereich 0,001 sekunde also 1 milli sekunde) gehen?
@ups: Hab versucht mich bisschen schlau zu machen - hab aber deinen letzten Post nicht wirklich ganz verstanden
Danke euch vielmals!

Verfasst: 9. August 2006 20:02
von Christian81
Da dann der GUI-Thread nicht die Ausführung deiner Berechnung (und umgekehrt) blockiert und dadurch erst gezeichnet wird wenn dieser dran ist, sollte es flüssiger werden. Ausserdem kann man so einen schönen Abbrechen-Button einbauen
