8
votes

Auto Fermer QMessageBox

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

En ce moment, j'utilise le code ci-dessous de sorte que l'utilisateur puisse fermer la QMessagoBox, mais je l'aimerais s'il était possible de fermer automatiquement le QMessagebox après 1 ou 2 secondes. Comment puis-je faire cela en utilisant QT? xxx


0 commentaires

5 Réponses :


4
votes

Je suggérerais de sous-classe qmesagebox pour ajouter votre propre comportement souhaité ...

Il serait intéressant d'ajouter des méthodes telles que setautoclose (bool) et setautoclosetimeout (int) et déclencher un qticer sur showevent lorsque l'option Autoclose est activée!

De cette façon, vous pouvez même modifier l'apparence de votre QMessagoBox et si un texte indiquant "Cette case se ferme automatiquement en secondes xxx ..." ou une barre de progression, etc ... < / p>


0 commentaires

7
votes

Merci vraiment beaucoup! Ma solution:

J'ai créé ma propre classe (MessageBox) Ceci est mon code pour le montrer: P>

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


3 commentaires

Où est votre définition de Starttimer?


Vous pouvez également utiliser la méthode qabstractpushbutton.animateclick en ajoutant simplement msgbox.setandardbuttons (QMessagoBox :: OK); msgbox.button (QMessagoBox :: OK) .Animateclick (Timeout)


Les objets ont plusieurs minuteries et vous devez vérifier si l'événement de la minuterie que vous recevez est en fait celui que vous attendez. Deuxièmement, la minuterie peut être définie pour tout le temps à la fois, c'est-à-dire closetimer.startimer (timeout * 1000) , où: qbasicter timexicer . Alors: void messagebox :: timerevent (qtimerevent * e) {if (e-> minuteride () == closetimer.timerid ()) terminé (0); }



2
votes

à la place, vous pouvez utiliser singleshot la minuterie pour fermer n'importe quelle boîte de dialogue ou qlabel avec beaucoup de facilité: xxx


0 commentaires

1
votes

avec ce code:

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


0 commentaires

1
votes

Ceci peut aider quelqu'un, xxx

la messagerie se ferme après 5 secondes.


0 commentaires