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.