Я использую QT 4.8.5. Я столкнулся с некоторыми проблемами в QProgressDialog с MinimumDuration.
Вот документация: http://doc.qt.io/qt-4.8/qprogressdialog.html#minimumDuration-prop.
1. Проверьте с помощью следующего кода. Диалог не отображается вообще. Но в документации сказано:диалоговое окно появится после минимального времени или как только будет достигнут какой-либо прогресс «.
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
2. Проверьте с помощью следующего кода. Диалог отображается через 8 секунд. Но в документации сказано: «диалоговое окно появится после минимального времени или как только будет достигнут какой-либо прогрессMsgstr «Хотя поведение с документацией отличается, я думаю, что текущее поведение является приемлемым.
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
3. Проверьте с помощью следующего кода. Диалог никогда не отображается. Но в документации сказано:диалоговое окно появится после минимального времени или как только будет установлен прогресс».
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(1);
4. Проверьте с помощью следующего кода. Поведение такое же, как в пункте 2.
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
dlg->setValue(1);
5. Проверьте с помощью следующего кода. Диалоговое окно отображается, как только значение прогресса устанавливается равным 1. Почему функция Sleep () влияет на поведение здесь?
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
::Sleep(static_cast<DWORD>(1000));
dlg->setValue(1);
6. Проверьте с помощью кода ниже. Диалог отображается сразу, но я установил для MinimumDuration значение 5. Это проблема?
QProgressDialog* dialog = new QProgressDialog("Message", "Close", 1, 10);
dialog->setMinimumDuration(5000);
dialog->setValue(0);
dialog->setValue(1);
Я тестирую на Windoes 7. Какие проблемы? Каковы правильные поведения?
На самом деле информация разбросана вокруг, поэтому, кажется, нет смысла. Но есть драгоценный намек в док :
QProgressDialog … оценивает время, которое займет операция
(основанный на времени для шагов), и только показывает себя, если что
оценка выше минимальной продолжительности () (по умолчанию 4 секунды).
Диалог, кажется, использует value
свойство, чтобы приблизить время, необходимое для шагов. И кажется, что значение свойства по умолчанию не установлено
Для того, чтобы диалог прогресса работал как положено, вы должны сначала установить
это свойство равно 0 и, наконец, установите его в QProgressDialog :: maximum ();
В самом деле, dialog->value()
возвращает -1 в моей машине после строительства.
Упаковать :
Диалог отображается, как только он интерполирует, что Итого работы займет больше минимального времени
Установка значения на что-либо ниже, чем QProgressDialog::minimum()
, что имеет место по умолчанию, заставляет индикатор выполнения оставаться скрытым.
0 = minimum
, Через 8 секунд вы все еще не обновили это значение. это означает, что обработка одного элемента занимает более 8 секунд. Должен показать.0 -> minimum -> maximum
за правильное поведение. В третьем случае не удастся сделать это, поскольку значение изменяется от -1 до 1, но не устанавливается на 0 = минимум. Не указано, в этой версии не показывает.8s
, поэтому диалог отображается, как только dlg->setValue(1);
выполнен.Я проверил это на OS X с Qt 5 и получил те же результаты
Внимательно изучив документацию для SetValue, Говорится: —
Чтобы диалоговое окно прогресса работало должным образом, вы должны сначала установить это свойство в QProgressDialog ::imum () и, наконец, установить его в QProgressDialog :: Maximum (); Вы можете вызывать setValue () любое количество промежуточных интервалов.
Имея это в виду, он работает как положено, что видно, когда вы сначала устанавливаете значение на ноль, а затем другое значение.
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
dlg->setValue(1);
Итак, я думаю, что документация для setMinimumDuration, вероятно, должна также ссылаться на это, но поведение корректно в соответствии с документацией, принимая во внимание setValue.