Класс QProgressDialog
Класс QProgressDialog предоставляет обратную связь о ходе выполнения медленной операции. Подробнее...
| Заголовок: | #include <QProgressDialog> |
| qmake: | QT += widgets |
| Наследуется от: | QDialog |
Свойства
|
- 2 свойства унаследованы от QDialog
- 59 свойств унаследованы от QWidget
- 1 свойство унаследовано от QObject
Открытые функции
| QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = ...) | |
| QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = ...) | |
| virtual | ~QProgressDialog() |
| bool | autoClose() const |
| bool | autoReset() const |
| QString | labelText() const |
| int | maximum() const |
| int | minimum() const |
| int | minimumDuration() const |
| void | open(QObject *receiver, const char *member) |
| void | setAutoClose(bool close) |
| void | setAutoReset(bool reset) |
| void | setBar(QProgressBar *bar) |
| void | setCancelButton(QPushButton *cancelButton) |
| void | setLabel(QLabel *label) |
| int | value() const |
| bool | wasCanceled() const |
Переопределённые открытые функции
| virtual QSize | sizeHint() const override |
- 8 открытых функций унаследовано от QDialog
- 214 открытых функций унаследовано от QWidget
- 31 открытых функций унаследовано от QObject
- 14 открытых функций унаследовано от QPaintDevice
Открытые слоты
| void | cancel() |
| void | reset() |
| void | setCancelButtonText(const QString &cancelButtonText) |
| void | setLabelText(const QString &text) |
| void | setMaximum(int maximum) |
| void | setMinimum(int minimum) |
| void | setMinimumDuration(int ms) |
| void | setRange(int minimum, int maximum) |
| void | setValue(int progress) |
- 5 открытых слотов унаследовано от QDialog
- 19 открытых слотов унаследовано от QWidget
- 1 открытый слот унаследовано от QObject
Сигналы
| void | canceled() |
- 3 сигнала унаследовано от QDialog
- 3 сигнала унаследовано от QWidget
- 2 сигнала унаследовано от QObject
Статические открытые члены
| const QMetaObject | staticMetaObject |
- 5 статических открытых членов унаследовано от QWidget
- 9 статических открытых членов унаследовано от QObject
Переопределённые защищённые функции
| virtual void | changeEvent(QEvent *ev) override |
| virtual void | closeEvent(QCloseEvent *e) override |
| virtual void | resizeEvent(QResizeEvent *event) override |
| virtual void | showEvent(QShowEvent *e) override |
- 6 защищённых функций унаследовано от QDialog
- 35 защищённых функций унаследовано от QWidget
- 9 защищённых функций унаследовано от QObject
- 1 защищённая функция унаследовано от QPaintDevice
Защищённые слоты
| void | forceShow() |
- 1 защищённый слот унаследовано от QWidget
Подробное описание
Класс QProgressDialog предоставляет обратную связь о ходе выполнения медленной операции.
Диалог прогресса используется для того, чтобы дать пользователю представление о том, сколько времени займёт операция, и продемонстрировать, что приложение не зависло. Он также может предоставить пользователю возможность прервать операцию.
Распространённая проблема с диалогами прогресса заключается в том, что сложно понять, когда их следует использовать; операции занимают разное время на различных устройствах. QProgressDialog предлагает решение этой проблемы: он оценивает время выполнения операции (на основе времени для шагов) и отображается только в том случае, если эта оценка превышает minimumDuration() (по умолчанию 4 секунды).
Используйте setMinimum() и setMaximum() или конструктор для задания количества «шагов» в операции и вызывайте setValue() по мере выполнения операции. Количество шагов можно выбирать произвольно. Оно может представлять количество скопированных файлов, количество полученных байтов, количество итераций основного цикла вашего алгоритма или другие подходящие единицы измерения. Прогресс начинается со значения, установленного с помощью setMinimum(), и диалог прогресса показывает завершение операции при вызове setValue() со значением, установленным с помощью setMaximum(), в качестве аргумента.
Диалог автоматически сбрасывается и скрывается в конце операции. Используйте setAutoReset() и setAutoClose() для изменения этого поведения. Обратите внимание, что если вы установите новое максимальное значение (с помощью setMaximum() или setRange()), равное текущему значению value(), диалог не закроется.
Существует два способа использования QProgressDialog: модальный и бессодержательный.
По сравнению с бессодержательным QProgressDialog, модальный QProgressDialog проще в использовании для программиста. Выполните операцию в цикле, вызовите setValue() с интервалами и проверьте отмену с помощью wasCanceled(). Например:
QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);
progress.setWindowModality(Qt::WindowModal);
for (int i = 0; i < numFiles; i++) {
progress.setValue(i);
if (progress.wasCanceled())
break;
//... copy one file
}
progress.setValue(numFiles); Бессодержательный диалог прогресса подходит для операций, выполняемых в фоновом режиме, где пользователь может взаимодействовать с приложением. Такие операции обычно основаны на QTimer (или QObject::timerEvent()) или QSocketNotifier; или выполняются в отдельном потоке. QProgressBar в строке состояния вашего основного окна часто является альтернативой бессодержательному диалогу прогресса.
Вам необходимо иметь работающий цикл событий, подключить сигнал canceled() к слоту, который останавливает операцию, и вызывать setValue() с интервалами. Например:
// Operation constructor
Operation::Operation(QObject *parent)
: QObject(parent), steps(0)
{
pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100);
connect(pd, SIGNAL(canceled()), this, SLOT(cancel()));
t = new QTimer(this);
connect(t, SIGNAL(timeout()), this, SLOT(perform()));
t->start(0);
}
void Operation::perform()
{
pd->setValue(steps);
//... perform one percent of the operation
steps++;
if (steps > pd->maximum())
t->stop();
}
void Operation::cancel()
{
t->stop();
//... cleanup
} В обоих режимах диалог прогресса можно настроить, заменив дочерние виджеты пользовательскими виджетами, используя setLabel(), setBar() и setCancelButton(). Функции setLabelText() и setCancelButtonText() устанавливают отображаемый текст.
См. также QDialog, QProgressBar, Руководство по разработке пользовательского интерфейса: Индикатор прогресса, Пример Find Files и Пример Pixelator.
Документация свойств
autoClose : bool
Это свойство указывает, скрывается ли диалог с помощью reset()
Значение по умолчанию — true.
Функции доступа:
| bool | autoClose() const |
| void | setAutoClose(bool close) |
См. также setAutoReset().
autoReset : bool
Это свойство указывает, вызывает ли диалог прогресса reset() сразу же, как value() становится равным maximum()
Значение по умолчанию — true.
Функции доступа:
| bool | autoReset() const |
| void | setAutoReset(bool reset) |
См. также setAutoClose().
labelText : QString
Это свойство содержит текст метки.
Текст по умолчанию — пустая строка.
Функции доступа:
| QString | labelText() const |
| void | setLabelText(const QString &text) |
maximum : int
Это свойство содержит наибольшее значение, представленное полосой прогресса.
Значение по умолчанию — 100.
Функции доступа:
| int | maximum() const |
| void | setMaximum(int maximum) |
См. также minimum и setRange().
minimum : int
Это свойство содержит наименьшее значение, представленное полосой прогресса.
Значение по умолчанию — 0.
Функции доступа:
| int | minimum() const |
| void | setMinimum(int minimum) |
См. также maximum и setRange().
minimumDuration : int
Это свойство содержит время, которое должно пройти, прежде чем диалог появится.
Если ожидаемая продолжительность задачи меньше, чем minimumDuration, диалог вообще не отобразится. Это предотвращает появление диалога для задач, которые быстро завершаются. Для задач, ожидаемых продолжительностью свыше minimumDuration, диалог отобразится через minimumDuration или как только будет установлено значение прогресса.
Если установлено в 0, диалог всегда отображается, как только устанавливается значение прогресса. Значение по умолчанию — 4000 миллисекунд.
Функции доступа:
| int | minimumDuration() const |
| void | setMinimumDuration(int ms) |
value : int
Это свойство содержит текущий объем выполненной работы.
Для корректной работы диалога прогресса, вы должны изначально установить это свойство в QProgressDialog::minimum() и в конечном итоге установить его в QProgressDialog::maximum(); вы можете вызывать setValue() любое количество раз между ними.
Предупреждение: Если диалог прогресса модальный (см. QProgressDialog::QProgressDialog()), вызовы setValue() вызывают QApplication::processEvents(), поэтому следите за тем, чтобы это не вызывало нежелательной рекурсии в вашем коде. Например, не используйте QProgressDialog внутри paintEvent()!
Функции доступа:
| int | value() const |
| void | setValue(int progress) |
wasCanceled : const bool
Это свойство указывает, была ли отменена операция.
Функции доступа:
| bool | wasCanceled() const |
Документация по членам функции
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = ...)
Создаёт диалог прогресса.
Параметры по умолчанию:
- Текст метки — пустая строка.
- Текст кнопки отмены — (переведённый) «Отмена».
- minimum — 0;
- maximum — 100
Аргумент parent — родительский виджет диалога. Флаги виджета f передаются в конструктор QDialog::QDialog().
См. также setLabelText(), setCancelButtonText(), setCancelButton(), setMinimum() и setMaximum().
QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = ...)
Создаёт диалоговое окно прогресса.
labelText — текст, который напоминает пользователю о процессе.
cancelButtonText — текст для отображения на кнопке отмены. Если передано QString(), кнопка отмены не отображается.
minimum и maximum — количество шагов в операции, для которой отображается диалоговое окно прогресса. Например, если операция состоит в проверке 50 файлов, минимальное значение будет 0, а максимальное — 50. Перед проверкой первого файла вызовите setValue(0). При обработке каждого файла вызывайте setValue(1), setValue(2) и т. д., а после проверки последнего файла — setValue(50).
Аргумент parent — родительский виджет диалогового окна. Родитель, parent и флаги виджета, f, передаются конструктору QDialog::QDialog().
См. также setLabelText(), setLabel(), setCancelButtonText(), setCancelButton(), setMinimum() и setMaximum().
[virtual] QProgressDialog::~QProgressDialog()
Удаляет диалоговое окно прогресса.
[slot] void QProgressDialog::cancel()
Сбрасывает диалоговое окно прогресса. wasCanceled() становится истинным до тех пор, пока диалоговое окно прогресса не будет сброшено. Диалоговое окно прогресса скрывается.
[signal] void QProgressDialog::canceled()
Этот сигнал подаётся при нажатии кнопки отмены. По умолчанию он подключается к слоту cancel().
См. также wasCanceled().
[override virtual protected] void QProgressDialog::changeEvent(QEvent *ev)
Переопределено из QWidget::changeEvent().
[override virtual protected] void QProgressDialog::closeEvent(QCloseEvent *e)
Переопределено из QDialog::closeEvent().
[protected slot] void QProgressDialog::forceShow()
Отображает диалоговое окно, если оно по-прежнему скрыто после запуска алгоритма и прошло minimumDuration миллисекунд.
См. также setMinimumDuration().
void QProgressDialog::open(QObject *receiver, const char *member)
Открывает диалоговое окно и подключает сигнал canceled() к слоту, указанному receiver и member.
Сигнал будет отключён от слота при закрытии диалогового окна.
Эта функция была добавлена в Qt 4.5.
[slot] void QProgressDialog::reset()
Сбрасывает диалоговое окно прогресса. Диалоговое окно прогресса скрывается, если autoClose() равно true.
См. также setAutoClose() и setAutoReset().
[override virtual protected] void QProgressDialog::resizeEvent(QResizeEvent *event)
Переопределено из QDialog::resizeEvent().
void QProgressDialog::setBar(QProgressBar *bar)
Устанавливает виджет полосы прогресса на bar. Диалоговое окно прогресса изменяет размер, чтобы вместить его. Диалоговое окно прогресса получает владение полосой прогресса bar, которая будет удалена при необходимости, поэтому не используйте полосу прогресса, выделенную в стеке.
void QProgressDialog::setCancelButton(QPushButton *cancelButton)
Устанавливает кнопку отмены на кнопку cancelButton. Диалоговое окно прогресса получает владение этой кнопкой, которая будет удалена при необходимости, поэтому не передавайте адрес объекта, который находится в стеке, т. е. используйте new() для создания кнопки. Если nullptr передано, кнопка отмены не будет отображаться.
См. также setCancelButtonText().
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText)
Устанавливает текст кнопки отмены на cancelButtonText. Если текст установлен в QString(), кнопка отмены будет скрыта и удалена.
См. также setCancelButton().
void QProgressDialog::setLabel(QLabel *label)
Устанавливает метку на label. Диалоговое окно прогресса изменяет размер, чтобы вместить её. Метка переходит во владение диалогового окна прогресса и будет удалена при необходимости, поэтому не передавайте адрес объекта, находящегося в стеке.
См. также setLabelText().
[slot] void QProgressDialog::setRange(int minimum, int maximum)
Устанавливает минимальное и максимальное значения диалогового окна прогресса соответственно на minimum и maximum.
Если maximum меньше minimum, minimum становится единственным допустимым значением.
Если текущее значение выходит за пределы нового диапазона, диалоговое окно прогресса сбрасывается с помощью reset().
[override virtual protected] void QProgressDialog::showEvent(QShowEvent *e)
Переопределено из QDialog::showEvent().
[override virtual] QSize QProgressDialog::sizeHint() const
Переопределено из QDialog::sizeHint().
Возвращает размер, который подходит для содержимого диалогового окна прогресса. Диалоговое окно прогресса изменяет свой размер по мере необходимости, поэтому вызывать эту функцию самостоятельно не нужно.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qprogressdialog.html