En esta página

QProgressDialog Class

La clase QProgressDialog proporciona información sobre el progreso de una operación lenta. Más...

Cabecera: #include <QProgressDialog>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Hereda: QDialog

Propiedades

Funciones públicas

QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
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

Funciones públicas reimplementadas

virtual QSize sizeHint() const override

Ranuras públicas

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)

Señales

void canceled()

Funciones protegidas reimplementadas

virtual void changeEvent(QEvent *ev) override
virtual void closeEvent(QCloseEvent *e) override
virtual void resizeEvent(QResizeEvent *event) override
virtual void showEvent(QShowEvent *e) override

Ranuras protegidas

void forceShow()

Descripción detallada

Un diálogo de progreso se utiliza para dar al usuario una indicación de cuánto tiempo va a tardar una operación, y para demostrar que la aplicación no se ha congelado. También puede dar al usuario la oportunidad de abortar la operación.

Un problema común con los diálogos de progreso es que es difícil saber cuándo usarlos; las operaciones toman diferentes cantidades de tiempo en diferentes hardware. QProgressDialog ofrece una solución a este problema: estima el tiempo que tardará la operación (basándose en el tiempo por pasos), y sólo se muestra si esa estimación es superior a minimumDuration() (4 segundos por defecto).

Utilice setMinimum() y setMaximum() o el constructor para establecer el número de "pasos" de la operación y llame a setValue() a medida que avanza la operación. El número de pasos puede elegirse arbitrariamente. Puede ser el número de archivos copiados, el número de bytes recibidos, el número de iteraciones a través del bucle principal de su algoritmo, o alguna otra unidad adecuada. El progreso comienza en el valor establecido por setMinimum(), y el diálogo de progreso muestra que la operación ha terminado cuando se llama a setValue() con el valor establecido por setMaximum() como argumento.

El diálogo se restablece automáticamente y se oculta al final de la operación. Utilice setAutoReset() y setAutoClose() para cambiar este comportamiento. Tenga en cuenta que si establece un nuevo máximo (usando setMaximum() o setRange()) que sea igual al actual value(), el diálogo no se cerrará a pesar de ello.

Hay dos formas de usar QProgressDialog: modal y sin modelo.

Comparado con un QProgressDialog sin modelo, un QProgressDialog modal es más simple de usar para el programador. Realiza la operación en un bucle, llama a setValue() a intervalos, y comprueba la cancelación con wasCanceled(). Por ejemplo:

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);

Un diálogo de progreso sin modelo es adecuado para operaciones que tienen lugar en segundo plano, donde el usuario puede interactuar con la aplicación. Tales operaciones se basan típicamente en una clase de temporizador, como QChronoTimer (o la de más bajo nivel QObject::timerEvent()) o QSocketNotifier; o se realizan en un hilo separado. Un QProgressBar en la barra de estado de su ventana principal es a menudo una alternativa a un diálogo de progreso sin modelo.

Necesita tener un bucle de eventos en ejecución, conectar la señal canceled() a una ranura que detenga la operación, y llamar a setValue() a intervalos. Por ejemplo:

// Operation constructor
Operation::Operation(QObject *parent)
    : QObject(parent), steps(0)
{
    pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100);
    connect(pd, &QProgressDialog::canceled, this, &Operation::cancel);
    t = new QTimer(this);
    connect(t, &QTimer::timeout, this, &Operation::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
}

En ambos modos, el diálogo de progreso puede personalizarse sustituyendo los widgets hijos por widgets personalizados mediante setLabel(), setBar() y setCancelButton(). Las funciones setLabelText() y setCancelButtonText() establecen los textos mostrados.

Un diálogo de progreso mostrado en el estilo del widget Fusion.

Véase también QDialog y QProgressBar.

Documentación de propiedades

autoClose : bool

Esta propiedad indica si el diálogo se oculta mediante reset()

Por defecto es true.

Funciones de acceso:

bool autoClose() const
void setAutoClose(bool close)

Véase también setAutoReset().

autoReset : bool

Esta propiedad mantiene si el diálogo de progreso llama a reset() tan pronto como value() es igual a maximum().

Por defecto es true.

Funciones de acceso:

bool autoReset() const
void setAutoReset(bool reset)

Véase también setAutoClose().

labelText : QString

Esta propiedad contiene el texto de la etiqueta

El texto por defecto es una cadena vacía.

Funciones de acceso:

QString labelText() const
void setLabelText(const QString &text)

maximum : int

Esta propiedad contiene el valor más alto representado por la barra de progreso

El valor por defecto es 100.

Funciones de acceso:

int maximum() const
void setMaximum(int maximum)

Véase también minimum y setRange().

minimum : int

Esta propiedad contiene el valor más bajo representado por la barra de progreso

El valor por defecto es 0.

Funciones de acceso:

int minimum() const
void setMinimum(int minimum)

Véase también maximum y setRange().

minimumDuration : int

Esta propiedad contiene el tiempo que debe transcurrir antes de que aparezca el diálogo

Si la duración prevista de la tarea es inferior a la duración mínima, el cuadro de diálogo no aparecerá. Esto evita que el diálogo aparezca para tareas que se acaban rápidamente. Para las tareas que se espera que superen la duración mínima, el cuadro de diálogo aparecerá después del tiempo de duración mínima o tan pronto como se establezca algún progreso.

Si se establece en 0, el diálogo siempre se muestra tan pronto como se establece cualquier progreso. El valor por defecto es 4000 milisegundos.

Funciones de acceso:

int minimumDuration() const
void setMinimumDuration(int ms)

value : int

Esta propiedad contiene la cantidad actual de progreso realizado.

Para que el diálogo de progreso funcione como se espera, debe establecer inicialmente esta propiedad a QProgressDialog::minimum() y finalmente establecerla a QProgressDialog::maximum(); puede llamar a setValue() cualquier número de veces entre medias.

Advertencia: Si el diálogo de progreso es modal (ver QProgressDialog::QProgressDialog()), setValue() llama a QCoreApplication::processEvents(), así que tenga cuidado de que esto no cause una reentrada no deseada en su código. Por ejemplo, ¡no uses un QProgressDialog dentro de un paintEvent()!

Funciones de acceso:

int value() const
void setValue(int progress)

Véase también minimum y maximum.

[read-only] wasCanceled : bool

Esta propiedad indica si el diálogo ha sido cancelado

Funciones de acceso:

bool wasCanceled() const

Documentación de funciones miembro

[explicit] QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

Construye un diálogo de progreso.

Configuración por defecto:

  • El texto de la etiqueta está vacío.
  • El texto del botón de cancelación es (traducido) "Cancelar".
  • El mínimo es 0;
  • máximo es 100

El argumento parent es el widget padre del diálogo. Las banderas del widget, f, se pasan al constructor QDialog::QDialog().

Véase también setLabelText(), setCancelButtonText(), setCancelButton(), setMinimum(), y setMaximum().

QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

Construye un diálogo de progreso.

El labelText es el texto utilizado para recordar al usuario lo que está progresando.

El cancelButtonText es el texto a mostrar en el botón de cancelar. Si se pasa QString() no se muestra ningún botón de cancelación.

minimum y maximum es el número de pasos de la operación para los que este diálogo de progreso muestra el progreso. Por ejemplo, si la operación es examinar 50 ficheros, este valor mínimo sería 0, y el máximo sería 50. Antes de examinar el primer fichero, llame a setValue(0). A medida que se procesa cada fichero se llama a setValue(1), setValue(2), etc., llamando finalmente a setValue(50) después de examinar el último fichero.

El argumento parent es el widget padre del diálogo. El padre, parent, y las banderas del widget, f, se pasan al constructor QDialog::QDialog().

Véase también setLabelText(), setLabel(), setCancelButtonText(), setCancelButton(), setMinimum(), y setMaximum().

[virtual noexcept] QProgressDialog::~QProgressDialog()

Destruye el diálogo de progreso.

[slot] void QProgressDialog::cancel()

Reinicia el diálogo de progreso. wasCanceled() se convierte en verdadero hasta que se reinicia el diálogo de progreso. El diálogo de progreso se oculta.

[signal] void QProgressDialog::canceled()

Esta señal se emite cuando se pulsa el botón de cancelación. Está conectada por defecto a la ranura cancel().

Véase también wasCanceled().

[override virtual protected] void QProgressDialog::changeEvent(QEvent *ev)

Reimplementa: QWidget::changeEvent(QEvent *event).

[override virtual protected] void QProgressDialog::closeEvent(QCloseEvent *e)

Reimplementa: QDialog::closeEvent(QCloseEvent *e).

[protected slot] void QProgressDialog::forceShow()

Muestra el diálogo si sigue oculto después de que se haya iniciado el algoritmo y hayan transcurrido minimumDuration milisegundos.

Véase también setMinimumDuration().

void QProgressDialog::open(QObject *receiver, const char *member)

Abre el diálogo y conecta su señal canceled() a la ranura especificada por receiver y member.

La señal se desconectará de la ranura cuando se cierre el diálogo.

[slot] void QProgressDialog::reset()

Restablece el diálogo de progreso. El diálogo de progreso se oculta si autoClose() es verdadero.

Véase también setAutoClose() y setAutoReset().

[override virtual protected] void QProgressDialog::resizeEvent(QResizeEvent *event)

Reimplementa: QDialog::resizeEvent(QResizeEvent *).

void QProgressDialog::setBar(QProgressBar *bar)

Establece el widget de la barra de progreso en bar. El diálogo de progreso se redimensiona para ajustarse. El diálogo de progreso se apropia del progreso bar que se borrará cuando sea necesario, así que no utilices una barra de progreso asignada en la pila.

void QProgressDialog::setCancelButton(QPushButton *cancelButton)

Establece el botón de cancelación en el botón pulsador, cancelButton. El diálogo de progreso toma posesión de este botón que será borrado cuando sea necesario, así que no pases la dirección de un objeto que esté en la pila, es decir, usa new() para crear el botón. Si se pasa nullptr, no se mostrará ningún botón de cancelación.

Véase también setCancelButtonText().

[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText)

Establece el texto del botón de cancelación a cancelButtonText. Si el texto es establecido a QString() entonces causará que el botón de cancelación sea ocultado y borrado.

Véase también setCancelButton().

void QProgressDialog::setLabel(QLabel *label)

Establece la etiqueta en label. El diálogo de progreso se redimensiona para ajustarse. La etiqueta pasa a ser propiedad del diálogo de progreso y se borrará cuando sea necesario, así que no pases la dirección de un objeto en la pila.

Véase también setLabelText().

[slot] void QProgressDialog::setRange(int minimum, int maximum)

Establece los valores mínimo y máximo del diálogo de progreso en minimum y maximum, respectivamente.

Si maximum es menor que minimum, minimum se convierte en el único valor legal.

Si el valor actual queda fuera del nuevo rango, el diálogo de progreso se reinicia con reset().

Véase también minimum y maximum.

[override virtual protected] void QProgressDialog::showEvent(QShowEvent *e)

Reimplementa: QDialog::showEvent(QShowEvent *event).

[override virtual] QSize QProgressDialog::sizeHint() const

Reimplementa: QDialog::sizeHint() const.

Devuelve un tamaño que se ajusta al contenido del diálogo de progreso. El diálogo de progreso se redimensiona a sí mismo según sea necesario, por lo que no debería ser necesario llamar a esta función.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.