Question

Je construis un projet Symbian Qt et je veux montrer une notification pour l'utilisateur qui doit se fermer automatiquement après quelques secondes. Je l'ai vu que Nokia utilise beaucoup dans leur ui.

En ce moment je suis en utilisant le code ci-dessous afin que l'utilisateur peut fermer la QMessageBox mais je voudrais s'il était possible de fermer automatiquement le QMessageBox après 1 ou 2 secondes. Comment puis-je faire cela en utilisant Qt?

QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
Était-ce utile?

La solution

Je suggère à sous-classe QMessageBox d'ajouter votre propre comportement souhaité ...

Il serait intéressant d'ajouter des méthodes comme setAutoClose(bool) et setAutoCloseTimeout(int) et déclencher une QTimer sur showEvent lorsque l'option est activée AutoClose!

De cette façon, vous pouvez même modifier l'apparence de votre QMessageBox et avait un texte disant: « Cette boîte se ferme automatiquement en quelques secondes ... XXX » ou une barre de progression, etc ...

Autres conseils

Merci vraiment beaucoup! Ma solution:

J'ai créé ma propre classe (MessageBox) ceci est mon code pour montrer:

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();

Ceci est ma classe:

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);
    }
}

Au lieu de cela, vous pouvez utiliser la minuterie de Singleshot pour fermer une boîte de dialogue ou QLabel avec beaucoup de facilité:

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

Avec ce code:

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

vous obtenez:

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

Becouse MSGBOX (le récepteur) doit être un objet QtCore .. et QMessageBox subclassing QtGui. Voir https: / /srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html#PySide.QtCore.PySide.QtCore.QTimer.singleShot

Cela peut aider quelqu'un,

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

Le messageBox se ferme au bout de 5 secondes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top