QProgressDialog oder QProgressbar
-
Hallo,
kennt sich jemand aus mit QProgressDialog oder QProgressbar?
Will einen Folder zippen aus dem Code heraus und solange das Zippen dauert eine Progressbar anzeigen. Ich weiss nicht wie ich den Maximalwert bestimmen kann/soll beim Anlegen der QProgressDialog. Woher soll QProgressDialog wissen wielange das Zippen dauert?
Mein Ansatz ist das hier:
MyTask::MyTask(QObject *parent) : QObject(parent), steps(0) { pd = new QProgressDialog("Task in progress.", "Cancel", 0, 100000); connect(pd, SIGNAL(canceled()), this, SLOT(cancel())); t = new QTimer(this); connect(t, SIGNAL(timeout()), this, SLOT(perform())); t->start(0); } void MyTask::perform() { pd->setValue(steps); //... perform one percent of the operation steps++; if (steps > pd->maximum()) t->stop(); } void MyTask::cancel() { t->stop(); //... cleanup }
und dann an einer anderen Stelle benützen mit:
myTask = new MyTask; run(); // startet zippen
-
Meiner neuer Ansatz ist folgender:
QProgressDialog pd("Unzipping data ...", "Abort", 0, 0, this); QFutureWatcher<void> watcher; QObject::connect(&watcher, SIGNAL(finished()), &pd, SLOT(reset())); QObject::connect(&pd, SIGNAL(canceled()), &watcher, SLOT(cancel())); QObject::connect(&watcher, SIGNAL(progressRangeChanged(int,int)), &pd, SLOT(setRange(int,int))); connect(&watcher, SIGNAL(progressValueChanged(int)), &pd, SLOT(setValue(int))); QFuture<void> f = QtConcurrent::run(this, &DataImport::run); watcher.setFuture(f); pd.exec(); watcher.waitForFinished();
Also "run()" läuft parallel. Ich bekommen die Progressbar zwar angezeigt. Die macht mir aber keinen Balken der von links nach rechts zunimmt. Sondern wie in folgendem Bild der untere Progressbar:
https://www.devexpress.com/Subscriptions/DXperience/WhatsNew2010v1/i/wpf-progress-bar.png
Hat jemand eine Idee?
Danke!
-
Das kommt daher, dass der Max Wert 0 ist. Dein Problem hat auch nichts mit QProgressDings an sich zu tun. Dein Problem ist, wie du den Maximalwert und den aktuellen Fortschritt bestimmst. Keine Ahnung, das musst du wissen. Anscheinend hast du ja irgendwelche Werte, weil deine Signale haben int Parameter. Jetzt musst du nur noch wissen, was das alles ist.