PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QProgressDialog für werte > int ?



Mat
06-08-2006, 21:38
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!

xmarvel
06-08-2006, 22:38
also dein problem seh ich noch nicht so deutlich ist die max. grenze zu hoch für deine progressbar?
wenn ja dann schifte doch den wert nach rechts und runde es mittels qRound() sollte dann ziemlich schnell gehen.

Gruss,
xmarvel

anda_skoa
07-08-2006, 14:23
Ein pendelnder Balken kann man mit Maximum == 0 erreichen.

Welche Operation braucht bei dir mehr als 2 Mrd Schritte?

Ciao,
_

Mat
07-08-2006, 18:36
2 Mrd? ist den der Wertebereich für int nicht bei 65535 ? (16 bit) ? schlagt mich wenn ich mich irre :) bevor ich jetzt wild rumrunde bzw. rechne....raubt denn die aktualisierung der ProgressBar oder des ProgressDialogs viel Zeit? Bin mir unsicher aber bei mir raubte das immer einige 10tel millisekunden . Auch die Verwendung eines nur pendelnden Balken ruft dieses delay auf. Hat jemand erfahrung? Irgendwo ist es ja klar dass es mehr Zeit kostet...was wäre denn eine performante Alternative? Evtl. ein statischer Dialog der nur eine Message beinhaltet?
Würde es mit einem animierten Gif funktionieren? Ich meine so als Bild des pendelnden Balkens? Nur so ne (dumme) Frage...

peschmae
08-08-2006, 06:51
Ints sind im Normalfall 32bit.

Ich weiss nicht wie das genau gelöst ist in Qt - kannst ja mal beides Performancemässig vergleichen (update bei jedem Schleifenschritt oder Update bei jedem 100tsten oder sowas). Dann weisst dus ;)

MfG Peschmä

Mat
09-08-2006, 18:54
würde es vielleicht was bringen den dialog in einen eigenen thread zu packen?

anda_skoa
09-08-2006, 23:27
Den Dialog auf keinen Fall, GUI wird nur im EventloopThread unterstützt.

Du könntest die Berechnung/Verarbeitung in einem Thread machen

Oder vielleicht mit einem Timer, der zB alle 100ms den Progress updated

Ciao,
_

RHBaum
10-08-2006, 11:49
Glaub du hasst eher nen konzeptionelles problem ^^

wenn du in jedem schleifendurchlaauf deiner berechnung ne grafikfunktion (Prozessbar) aufrufst ... wird das bei laengeren sachen nie performant ^^

und wie anda_skoa schon andeutet, wenn deine berechnung ned im GUI thread laeuft musst eh entkoppeln (Signal / Slots in der QT4 sollten das scho automatisch machen)

Aber da auch vorsicht walten lassen .... aller 100ms einmal aktualisieren langt fuer den usder scho ... alternativ vielleicht nur wenn sich der balken nen ganzes prozent verschiebt.

Die berechnungen dazu sind wiederum nich sooo aufwendig (im gegensatz zum dialog updaten) ....

Ciao ...