Pregunta

Estoy construyendo un proyecto Symbian Qt y quiero mostrar una notificación para el usuario que debe auto cerca después de algunos segundos. He visto que Nokia utiliza mucho en esto en su interfaz de usuario.

En este momento estoy usando el código de abajo de modo que el usuario puede cerrar la QMessageBox pero me gustaría que si era posible cerrar el auto QMessageBox después de 1 o 2 segundos. ¿Cómo puedo hacer esto usando Qt?

QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
¿Fue útil?

Solución

Yo sugeriría a la subclase QMessageBox añadir su comportamiento deseado ...

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

De esta manera, incluso se podría alterar la apparence de su QMessageBox y tenía un texto que dice "Esta ventana se cerrará automáticamente en segundos XXX ..." o una barra de progreso, etc ...

Otros consejos

Gracias realmente mucho! Mi solución:

He creado mi propia clase (de mensaje) 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);
    }
}

En lugar de poder utilizar Timer Singleshot para cerrar cualquier cuadro de diálogo o QLabel con mucha facilidad:

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

Con este código:

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

que se obtiene:

QObject::connect: Incompatible sender/receiver arguments
        QTimer::timeout() --> QMessageBox::

becouse MSGBOX (el receptor) debe ser un objeto QtCore .. y QMessageBox subclases QtGui. Ver https: / /srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html#PySide.QtCore.PySide.QtCore.QTimer.singleShot

Esto puede ayudar a alguien,

msgBox.button(QMessageBox::Ok)->animateClick(5000);

El messageBox cierra después de 5 segundos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top