Etienne Sandré-Chardonnal schreef op 15-11-2013 14:05:
Dear all,

I have a long file saving function (gigabytes - several minutes) and I am trying to use QProcessDialog. I am using it the Modal way as explained in the documentation. However, the dialog appears after about 50 seconds, despite having set the minimumDuration to 0, and called setValue() several times before.

Googling for the issue says I need to call QApplication::processEvents regularly in order for the GUI to refresh. However, the doc says :

"If the progress dialog is modal (seeQProgressDialog::QProgressDialog <qthelp://com.trolltech.qt.481/qdoc/qprogressdialog.html#QProgressDialog>()), setValue() callsQApplication::processEvents <qthelp://com.trolltech.qt.481/qdoc/qcoreapplication.html#processEvents>(), so take care that this does not cause undesirable re-entrancy in your code"

So I'm puzzled... Do I need to call it, or is it already called by setValue? In the example there are no explicit calls to processEvents().

Qt 4.8.1
It is *not* called by setValue. That is a Good Thing(TM). In fact, I think the whole call is dangerous to begin with.

You have two viable approaches here:
* break up the saving method into chunks. That is, do a small part of the work of the saving, queue the next piece of work to be done, and return to the eventloop. The eventloop will then trigger the next queued piece of the work being done. This way, there is no need for processEvents() at all. * move your saving code to a worker object, and execute it in a separate thread. Also, no need to use processEvents, as the heavy lifting is done outside of the GUI thread.

Note that this does not only go for saving or loading, but it goes for any task that may block your GUI thread for a substantial amount of time.

André



_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to