QProgressDialog: проблемы с MinimumDuration

Я использую 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. Какие проблемы? Каковы правильные поведения?

3

Решение

На самом деле информация разбросана вокруг, поэтому, кажется, нет смысла. Но есть драгоценный намек в док :

QProgressDialog … оценивает время, которое займет операция
(основанный на времени для шагов), и только показывает себя, если что
оценка выше минимальной продолжительности () (по умолчанию 4 секунды).

Диалог, кажется, использует value свойство, чтобы приблизить время, необходимое для шагов. И кажется, что значение свойства по умолчанию не установлено

стоимость имущества :

Для того, чтобы диалог прогресса работал как положено, вы должны сначала установить
это свойство равно 0 и, наконец, установите его в QProgressDialog :: maximum ();

В самом деле, dialog->value() возвращает -1 в моей машине после строительства.

Упаковать :

  1. Не установка значения является проблемой. Вы должен установить значение иногда, чтобы заставить это работать.
  2. Диалог отображается, как только он интерполирует, что Итого работы займет больше минимального времени

  3. Установка значения на что-либо ниже, чем QProgressDialog::minimum(), что имеет место по умолчанию, заставляет индикатор выполнения оставаться скрытым.

  4. Ваши вторые случаи устанавливают значение 0 = minimum, Через 8 секунд вы все еще не обновили это значение. это означает, что обработка одного элемента занимает более 8 секунд. Должен показать.
  5. Вы должен изменить значение из 0 -> minimum -> maximum за правильное поведение. В третьем случае не удастся сделать это, поскольку значение изменяется от -1 до 1, но не устанавливается на 0 = минимум. Не указано, в этой версии не показывает.
  6. Ваш четвертый случай означает, что «первая обработка заняла 0 секунд, а вторая еще не завершена». Таким образом, поведение минимальной продолжительности наступает. Должно показать.
  7. Теперь, когда для первого задания есть одна секунда (случай 5), диалог аппроксимирует что 10 задач займет 10 секунд, что больше, чем 8s, поэтому диалог отображается, как только dlg->setValue(1); выполнен.
3

Другие решения

Я проверил это на 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.

3

По вопросам рекламы [email protected]