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
- modal : bool
- sizeGripEnabled : bool
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
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.
Diálogos 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.
| Constante | Valor |
|---|---|
QDialog::Accepted | 1 |
QDialog::Rejected | 0 |
Documentación de la propiedad
modal : bool
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.