На этом шаге рассмотрим стандартное диалоговое окно прогресса.
Для отображения прогресса какой-либо операции в диалоговом окне Qt предоставляет класс QProgressDialog, унаследованный от класса QDialog. Это окно информирует пользователя о начале продолжительной операции и дает возможность визуально оценить время работы. Окно может содержать кнопку Cancel (Отмена) для прерывания начатой операции. При нажатии на нее отправляется сигнал canceled(), который следует соединить со слотом, ответственным за прекращение проводимой операции.
Диалоговое окно открывается в том случае, если длительность всей операции будет составлять более трех секунд, гарантируя то, что диалоговое окно прогресса не будет появляться на короткий промежуток времени и вводить пользователя в заблуждение. Время можно изменить, передав в метод setMinimumDuration() целочисленное значение в миллисекундах. Задать количество шагов от начала до конца операции можно в третьем параметре конструктора при создании или же с помощью метода setTotalSteps(). В процессе выполнения операции должен вызываться метод setProgress().
Диалоговое окно прогресса, показанное на рис. 1, можно создать следующим образом:
Рис.1. Диалоговое окно прогресса выполнения операции
int n = 100000; QProgressDialog* pprd = new QProgressDialog("Обработка данных...", "&Отмена", 0, n); pprd->setMinimumDuration(0); pprd->setWindowTitle("Обработка"); for (int i = 0; i < n; ++i) { //это свойство устанавливает текущее значение прогресса pprd->setValue(i); //Обрабатывает все события на ожидании для вызывающего потока //можно вызывать эту функцию, //когда программа занята выполнением длительной операции qApp->processEvents(); //если выполнение действия было отменено if (pprd->wasCanceled()) { break; } } pprd->setValue(n); delete pprd;
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим cтандартное диалоговые окна мастера.