En esta página

QDialog Class

La clase QDialog es la clase base de las ventanas de diálogo. Más...

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

QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, y QWizard

Tipos públicos

enum DialogCode { Accepted, Rejected }

Propiedades

Funciones públicas

QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual ~QDialog()
bool isSizeGripEnabled() const
int result() const
void setModal(bool modal)
void setResult(int i)
void setSizeGripEnabled(bool)

Funciones públicas reimplementadas

virtual QSize minimumSizeHint() const override
virtual void setVisible(bool visible) override
virtual QSize sizeHint() const override

Ranuras públicas

virtual void accept()
virtual void done(int r)
virtual int exec()
virtual void open()
virtual void reject()

Señales

void accepted()
void finished(int result)
void rejected()

Funciones protegidas reimplementadas

virtual void closeEvent(QCloseEvent *e) override
virtual void contextMenuEvent(QContextMenuEvent *e) override
virtual bool eventFilter(QObject *o, QEvent *e) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void resizeEvent(QResizeEvent *) override
virtual void showEvent(QShowEvent *event) override

Descripción detallada

Una ventana de diálogo es una ventana de nivel superior utilizada principalmente para tareas a corto plazo y breves comunicaciones con el usuario. Los QDialogs pueden ser modales o no modales. Los QDialogs pueden proporcionar un return value, y pueden tener default buttons. Los QDialogs también pueden tener un QSizeGrip en su esquina inferior derecha, usando setSizeGripEnabled().

Ten en cuenta que QDialog (y cualquier otro widget que tenga el tipo Qt::Dialog) usa el widget padre de forma ligeramente diferente a otras clases en Qt. Un diálogo es siempre un widget de nivel superior, pero si tiene un padre, su ubicación por defecto está centrada encima del widget de nivel superior del padre (si no es él mismo de nivel superior). También compartirá la entrada de la barra de tareas del padre.

Usa la sobrecarga de la función QWidget::setParent() para cambiar la propiedad de un widget QDialog. Esta función te permite establecer explícitamente las banderas de ventana del widget reparentado; usar la función sobrecargada borrará las banderas de ventana que especifican las propiedades del sistema de ventanas para el widget (en particular reiniciará la bandera Qt::Dialog ).

Nota: La relación padre del diálogo no implica que el diálogo se apile siempre encima de la ventana padre. Para asegurarse de que la ventana de diálogo está siempre encima, haga que la ventana de diálogo sea modal. Esto también se aplica a las ventanas hijas de la propia ventana de diálogo. Para asegurarse de que las ventanas hijas del cuadro de diálogo permanecen encima del cuadro de diálogo, haga que las ventanas hijas también sean modales.

Un diálogo modal es un diálogo que bloquea la entrada a otras ventanas visibles en la misma aplicación. Los cuadros de diálogo que se utilizan para solicitar un nombre de archivo al usuario o para establecer las preferencias de la aplicación suelen ser modales. Los cuadros de diálogo pueden ser application modal (por defecto) o window modal.

Cuando se abre un diálogo modal de aplicación, el usuario debe terminar de interactuar con el diálogo y cerrarlo antes de poder acceder a cualquier otra ventana de la aplicación. Los diálogos modales de ventana sólo bloquean el acceso a la ventana asociada al diálogo, permitiendo al usuario seguir utilizando otras ventanas de una aplicación.

La forma más común de mostrar un diálogo modal es llamar a su función open(). Alternativamente, se puede llamar a setModal(true) o setWindowModality(), y luego a show(). En ambos casos, una vez que se muestra el diálogo, el control se devuelve inmediatamente a la persona que llama. Debe conectarse a la señal finished() para saber cuándo se cierra el diálogo y cuál es su return value. Alternativamente, puede conectarse a las señales accepted() y rejected().

Cuando implemente un diálogo personalizado, para cerrar el diálogo y devolver un valor apropiado, conecte un botón predeterminado, por ejemplo, un botón Aceptar, a la ranura accept(), y un botón Cancelar a la ranura reject(). Alternativamente, puede llamar a la ranura done() con Accepted o Rejected.

Si muestra el cuadro de diálogo modal para realizar una operación de larga duración, se recomienda realizar la operación en un subproceso trabajador en segundo plano, para que no interfiera con el subproceso GUI.

Advertencia: Cuando se utiliza open() o show(), el diálogo modal no debe crearse en la pila, para que no se destruya tan pronto como el control vuelva al llamador.

Nota: Existe una forma de mostrar un diálogo modal en modo de bloqueo llamando a exec(). En este caso, el control vuelve al hilo GUI sólo cuando se cierra el diálogo. Sin embargo, se desaconseja este enfoque, ya que crea un bucle de eventos anidado, que no está totalmente soportado por algunas plataformas.

Diálogos sin modelo

Un diálogo sin modelo es un diálogo que funciona independientemente de otras ventanas de la misma aplicación. Los cuadros de diálogo de búsqueda y reemplazo en los procesadores de texto suelen ser no modelizados para permitir al usuario interactuar tanto con la ventana principal de la aplicación como con el cuadro de diálogo.

Los cuadros de diálogo sin modelo se muestran utilizando show(), que devuelve el control a quien lo invoca inmediatamente.

Si se invoca la función show() después de ocultar un diálogo, éste se mostrará en su posición original. Esto se debe a que el gestor de ventanas decide la posición de las ventanas que no han sido colocadas explícitamente por el programador. Para preservar la posición de un diálogo que ha sido movido por el usuario, guarde su posición en su manejador closeEvent() y luego mueva el diálogo a esa posición, antes de mostrarlo de nuevo.

Botón por defecto

El botón por defecto de un diálogo es el botón que se pulsa cuando el usuario pulsa Intro (Retorno). Este botón se utiliza para indicar que el usuario acepta la configuración del diálogo y desea cerrarlo. Utilice QPushButton::setDefault(), QPushButton::isDefault() y QPushButton::autoDefault() para configurar y controlar el botón predeterminado del cuadro de diálogo.

Tecla Escape

Si el usuario pulsa la tecla Esc en un diálogo, se llamará a QDialog::reject(). Esto hará que la ventana se cierre: El close event no puede ser ignored.

Extensibilidad

La extensibilidad es la capacidad de mostrar el diálogo de dos maneras: un diálogo parcial que muestra las opciones más utilizadas, y un diálogo completo que muestra todas las opciones. Normalmente, un diálogo extensible aparecerá inicialmente como un diálogo parcial, pero con un botón de alternancia More. Si el usuario pulsa el botón More, el diálogo se expande.

Valor de retorno (diálogos modales)

Los diálogos modales se utilizan a menudo en situaciones en las que se requiere un valor de retorno, por ejemplo, para indicar si el usuario ha pulsado OK o Cancel. Un diálogo puede cerrarse llamando a las ranuras accept() o reject(), y exec() devolverá Accepted o Rejected según corresponda. La llamada a exec() devuelve el resultado del diálogo. El resultado también está disponible desde result() si el diálogo no ha sido destruido.

Para modificar el comportamiento de cierre de su diálogo, puede reimplementar las funciones accept(), reject() o done(). La función closeEvent() sólo debe reimplementarse para conservar la posición del diálogo o para anular el comportamiento estándar de cierre o rechazo.

Ejemplos de código

Un diálogo modal:

void EditorWindow::countWords()
{
    WordCountDialog dialog(this);
    dialog.setWordCount(document().wordCount());
    dialog.exec();
}

Un diálogo sin modelo:

void EditorWindow::find()
{
    if (!findDialog) {
        findDialog = new FindDialog(this);
        connect(findDialog, &FindDialog::findNext,
                this, &EditorWindow::findNext);
    }

    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}

Un diálogo con una extensión:

mainLayout->setSizeConstraint(QLayout::SetFixedSize);

findButton = new QPushButton(tr("&Find"));
moreButton = new QPushButton(tr("&More..."));
moreButton->setCheckable(true);

extension = new ExtendedControls;
mainLayout->addWidget(extension);
extension->hide();

connect(moreButton, &QAbstractButton::toggled, extension, &QWidget::setVisible);

Estableciendo la propiedad sizeConstraint del diseño del diálogo a SetFixedSize, el diálogo no será redimensionable por el usuario, y se encogerá automáticamente cuando la extensión se oculte.

Vea también QDialogButtonBox, QTabWidget, QWidget, QProgressDialog, y Ejemplo de Diálogos Estándar.

Documentación de tipos de miembros

enum QDialog::DialogCode

El valor devuelto por un diálogo modal.

ConstanteValor
QDialog::Accepted1
QDialog::Rejected0

Documentación de la propiedad

Esta propiedad indica si show() debe mostrar el diálogo como modal o sin modelo.

Por defecto, esta propiedad es false y show() abre el diálogo como modal. Establecer esta propiedad a true es equivalente a establecer QWidget::windowModality a Qt::ApplicationModal.

exec() ignora el valor de esta propiedad y siempre abre el diálogo como modal.

Funciones de acceso:

bool isModal() const
void setModal(bool modal)

Véase también QWidget::windowModality, show(), y exec().

sizeGripEnabled : bool

Esta propiedad mantiene si el agarre de tamaño está habilitado

Cuando esta propiedad está activada, aparece un QSizeGrip en la esquina inferior derecha del cuadro de diálogo. Por defecto, el control de tamaño está desactivado.

Funciones de acceso:

bool isSizeGripEnabled() const
void setSizeGripEnabled(bool)

Documentación de funciones miembro

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

Construye un diálogo con el padre parent.

Un diálogo es siempre un widget de nivel superior, pero si tiene un padre, su ubicación por defecto se centra en la parte superior del padre. También compartirá la entrada de la barra de tareas del padre.

Los indicadores del widget f se pasan al constructor QWidget. Si, por ejemplo, no desea un botón What's This en la barra de título del diálogo, pase Qt::WindowTitleHint | Qt::WindowSystemMenuHint en f.

Véase también QWidget::setWindowFlags().

[virtual noexcept] QDialog::~QDialog()

Destruye la página QDialog, borrando todos sus hijos.

[virtual slot] void QDialog::accept()

Oculta el diálogo modal y establece el código de resultado en Accepted.

Véase también reject() y done().

[signal] void QDialog::accepted()

Esta señal se emite cuando el diálogo ha sido aceptado por el usuario o llamando a accept() o done() con el argumento QDialog::Accepted.

Tenga en cuenta que esta señal no se emite cuando se oculta el diálogo con hide() o setVisible(false). Esto incluye borrar el diálogo mientras está visible.

Véase también finished() y rejected().

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

Reimplementa: QWidget::closeEvent(QCloseEvent *event).

[override virtual protected] void QDialog::contextMenuEvent(QContextMenuEvent *e)

Reimplementa: QWidget::contextMenuEvent(QContextMenuEvent *event).

[virtual slot] void QDialog::done(int r)

Cierra el diálogo y establece su código de resultado en r. La señal finished() emitirá r; si r es QDialog::Accepted o QDialog::Rejected, también se emitirán las señales accepted() o rejected() , respectivamente.

Si este diálogo se muestra con exec(), done() también hace que termine el bucle de eventos local, y que exec() devuelva r.

Al igual que con QWidget::close(), done() borra el diálogo si la bandera Qt::WA_DeleteOnClose está activada. Si el diálogo es el widget principal de la aplicación, la aplicación termina. Si el diálogo es la última ventana cerrada, se emite la señal QGuiApplication::lastWindowClosed().

Véase también accept(), reject(), QApplication::activeWindow() y QCoreApplication::quit().

[override virtual protected] bool QDialog::eventFilter(QObject *o, QEvent *e)

Reimplementa: QObject::eventFilter(QObject *watched, QEvent *event).

[virtual slot] int QDialog::exec()

Muestra el diálogo como modal dialog, bloqueándose hasta que el usuario lo cierra. La función devuelve un resultado DialogCode.

Si el diálogo es application modal, los usuarios no pueden interactuar con ninguna otra ventana de la misma aplicación hasta que cierren el diálogo. Si el diálogo es window modal, sólo se bloquea la interacción con la ventana padre mientras el diálogo está abierto. Por defecto, el diálogo es modal de aplicación.

Nota: Evite utilizar esta función; en su lugar, utilice open(). A diferencia de exec(), open() es asíncrona, y no hace girar un bucle de eventos adicional. Esto evita que se produzcan una serie de errores peligrosos (por ejemplo, borrar el diálogo padre mientras el diálogo está abierto mediante exec()). Cuando se utiliza open() se puede conectar a la señal finished() de QDialog para ser notificado cuando se cierra el diálogo.

Véase también open(), show(), result() y setWindowModality().

[signal] void QDialog::finished(int result)

Esta señal se emite cuando el código result del diálogo ha sido establecido, ya sea por el usuario o llamando a done(), accept(), o reject().

Tenga en cuenta que esta señal no se emite cuando se oculta el diálogo con hide() o setVisible(false). Esto incluye borrar el diálogo mientras está visible.

Véase también accepted() y rejected().

[override virtual protected] void QDialog::keyPressEvent(QKeyEvent *e)

Reimplementa: QWidget::keyPressEvent(QKeyEvent *event).

[override virtual] QSize QDialog::minimumSizeHint() const

Reimplementa una función de acceso para la propiedad: QWidget::minimumSizeHint.

[virtual slot] void QDialog::open()

Muestra el diálogo como window modal dialog, volviendo inmediatamente.

Véase también exec(), show(), result() y setWindowModality().

[virtual slot] void QDialog::reject()

Oculta el diálogo modal y establece el código de resultado en Rejected.

Véase también accept() y done().

[signal] void QDialog::rejected()

Esta señal se emite cuando el diálogo ha sido rechazado por el usuario o llamando a reject() o done() con el argumento QDialog::Rejected.

Tenga en cuenta que esta señal no se emite cuando se oculta el diálogo con hide() o setVisible(false). Esto incluye borrar el diálogo mientras está visible.

Véase también finished() y accepted().

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

Reimplementa: QWidget::resizeEvent(QResizeEvent *event).

int QDialog::result() const

En general devuelve el código de resultado del diálogo modal, Accepted o Rejected.

Nota: Cuando se llama a una instancia QMessageBox, el valor devuelto es un valor del enum QMessageBox::StandardButton.

No llame a esta función si el diálogo se construyó con el atributo Qt::WA_DeleteOnClose.

Véase también setResult().

void QDialog::setResult(int i)

Establece el código de resultado del diálogo modal en i.

Nota: Te recomendamos que utilices uno de los valores definidos por QDialog::DialogCode.

Véase también result().

[override virtual] void QDialog::setVisible(bool visible)

Reimplementa una función de acceso para la propiedad: QWidget::visible.

[override virtual protected] void QDialog::showEvent(QShowEvent *event)

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

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

Reimplementa una función de acceso para la propiedad: QWidget::sizeHint.

© 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.