Класс 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
- 34 открытых функций унаследованы от 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
Переопределённые защищённые функции
| 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
Дополнительные унаследованные члены
- 1 открытая переменная унаследована от QObject
- 5 статические открытые члены унаследованы от QWidget
- 10 статических открытых членов унаследованы от QObject
- 6 защищённых функций унаследованы от QDialog
- 35 защищённых функций унаследованы от QWidget
- 9 защищённых функций унаследованы от QObject
- 1 защищённая функция унаследована от QPaintDevice
- 2 защищённых переменных унаследованы от QObject
- 1 защищённый тип унаследован от QPaintDevice
Подробное описание
Класс 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, Руководство по проектированию пользовательского интерфейса: индикатор выполнения, Пример поиска файлов и Пример 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 файлов, значение minimum будет 0, а maximum — 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() для создания кнопки. Если передано 0, кнопка отмены не отображается.
См. также 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/archives/qt-5.11/qprogressdialog.html