Ich habe ein QProgressDialog
, dass ich sofortQProgressDialog Anzeige nicht sofort
QProgressDialog *progress = new QProgressDialog("Downloading files...",
"Cancel", 0, 2*selection.size()+1);
progress->setMinimumDuration(0);
progress->setWindowModality(Qt::WindowModal);
progress->setValue(0);
Dann laufe ich eine for
Schleife mit der Aufgabe angezeigt werden soll und schließlich den Maximalwert zuweisen:
for (int i = 1; i < selection.size()+1; ++i)
{
progress->setValue(2*i-1);
if (progress->wasCanceled())
break;
do_half_task();
progress->setValue(2*i);
if (progress->wasCanceled())
break;
do_second_half();
}
progress->setValue(2*selection.size()+1);
Aber mit In diesem Code werden die Grenzen des Dialogfelds angezeigt, Transparente ohne Widgets und nur mit dem Label und der Fortschrittsleiste gefüllt, wenn eine vollständige for-Schleife abgeschlossen ist.
Ich denke, das ist, weil nur nach einer vollständigen Schleife ist, dass Qt die Dauer jedes Schritts berechnen kann, und überprüfen Sie, dass es >0
ist, die ich als Mindestdauer festlegen. Doch von der Dokumentation sehe ich
minimumDuration: int
gesetzt Wenn es auf 0, wird der Dialog immer, sobald ein Fortschritt gezeigt wird. Der Standardwert ist 4000 Millisekunden.
Von wo ich erwartet hätte, dass der Dialog sofort in der ersten Schleife nach der Einstellung progress->setValue(1)
angezeigt wird. Wie kann ich meine QProgressDialog
sofort erscheinen lassen?
'setValue()' nennt bereits 'processEvents()' Ich arbeite an der Implementierung der Schleife in einem anderen Thread mit 'QtConcurrent' gemäß @MaddinTribleD Empfehlung, aber es ist ein wenig schwierig, weil meine Daten auf einem nicht gleichzeitiger Baum. Ich werde diese Antwort akzeptieren, wenn sich herausstellt, dass eine Schleife in einem anderen Thread das Problem löst. –