Класс QProgressDialog
Класс QProgressDialog предоставляет обратную связь о ходе выполнения медленной операции. Подробнее...
| Заголовок: | #include <QProgressDialog> |
| qmake: | QT += widgets |
| Наследуется от: | QDialog |
Свойства
|
- 2 свойства унаследованы от QDialog
- 59 свойств унаследованы от QWidget
- 1 свойство унаследовано от QObject
Открытые функции
| QProgressDialog(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()) | |
| QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()) | |
| ~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 |
- 8 открытых функций унаследованы от QDialog
- 214 открытых функций унаследованы от QWidget
- 32 открытых функций унаследованы от 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) |
| virtual void | closeEvent(QCloseEvent *e) |
| virtual void | resizeEvent(QResizeEvent *event) |
| virtual void | showEvent(QShowEvent *e) |
- 6 защищённых функций унаследованы от QDialog
- 35 защищённых функций унаследованы от QWidget
- 9 защищённых функций унаследованы от QObject
- 1 защищённая функция унаследована от QPaintDevice
Защищённые слоты
| void | forceShow() |
- 1 защищённый слот унаследован от QWidget
Дополнительные унаследованные члены
- 5 статических публичных членов унаследованы от QWidget
- 11 статических публичных членов унаследованы от QObject
- 6 защищённых функций унаследованы от QDialog
- 35 защищённых функций унаследованы от QWidget
- 9 защищённых функций унаследованы от 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 или QUrlOperator; или выполняются в отдельном потоке. 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 = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
Создаёт диалог прогресса.
Параметры по умолчанию:
- Текст метки — пустая строка.
- Текст кнопки отмены — (переведённое) «Отмена».
- 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 = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
Создаёт диалог выполнения.
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().
QProgressDialog::~QProgressDialog()
Уничтожает диалог выполнения.
[slot] void QProgressDialog::cancel()
Сбрасывает диалог выполнения. wasCanceled() становится true до тех пор, пока диалог выполнения не будет сброшен. Диалог выполнения скрывается.
[signal] void QProgressDialog::canceled()
Этот сигнал испускается при нажатии на кнопку отмены. По умолчанию он подсоединён к слоту cancel().
См. также wasCanceled().
[virtual protected] void QProgressDialog::changeEvent(QEvent *ev)
Переопределено из QWidget::changeEvent().
[virtual protected] void QProgressDialog::closeEvent(QCloseEvent *e)
Переопределено из QWidget::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().
[virtual protected] void QProgressDialog::resizeEvent(QResizeEvent *event)
Переопределено из QWidget::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().
[virtual protected] void QProgressDialog::showEvent(QShowEvent *e)
Переопределено из QWidget::showEvent().
[virtual] QSize QProgressDialog::sizeHint() const
Переопределено из QWidget::sizeHint().
Возвращает размер, который подходит для содержимого диалога выполнения. Диалог выполнения изменяет свой размер по мере необходимости, поэтому вы, скорее всего, не должны вызывать эту функцию.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qprogressdialog.html