Saltar al contenido

Cierre automático QMessageBox

Después de tanto batallar ya encontramos el arreglo de este asunto que muchos de nuestros usuarios de nuestra web presentan. Si quieres compartir algo no dejes de dejar tu comentario.

Solución:

¡Muchas gracias! Mi solución:

Creé mi propia clase (MessageBox), este es mi código para mostrarlo:

MessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setAutoClose(true);
msgBox.setTimeout(3); //Closes after three seconds
msgBox.exec();

Esta es mi clase:

class MessageBox : public QMessageBox

int timeout;
bool autoClose;
int currentTime;

void MessageBox::showEvent ( QShowEvent * event ) 
    currentTime = 0;
    if (autoClose) 
    this->startTimer(1000);
    


void MessageBox::timerEvent(QTimerEvent *event)

    currentTime++;
    if (currentTime>=timeout) 
    this->done(0);
    

Sugeriría subclase QMessageBox para agregar su propio comportamiento deseado…

Sería interesante añadir métodos como setAutoClose(bool) y setAutoCloseTimeout(int) y desencadenar un QTimer en showEvent cuando la opción AutoClose está habilitada!

De esta manera, podrías incluso alterar la apariencia de tu QMessageBox y tenía un texto que decía “Este cuadro se cerrará automáticamente en XXX segundos…” o una barra de progreso, etc…

En su lugar, puede utilizar Singleshot Temporizador para cerrar cualquier cuadro de diálogo o QLabel con mucha facilidad:

QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));

Si te gustó nuestro trabajo, eres capaz de dejar una sección acerca de qué te ha gustado de este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *