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? p>
5 Réponses :
Je suggérerais de sous-classe Il serait intéressant d'ajouter des méthodes telles que De cette façon, vous pouvez même modifier l'apparence de votre qmesagebox code> pour ajouter votre propre comportement souhaité ... p>
setautoclose (bool) code> et
setautoclosetimeout (int) code> et déclencher un
qticer code> sur
showevent code> lorsque l'option Autoclose est activée! p>
QMessagoBox CODE> et si un texte indiquant "Cette case se ferme automatiquement en secondes xxx ..." ou une barre de progression, etc ... < / p>
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); } }
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) Code>
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) code>, où:
qbasicter timexicer code>. Alors:
void messagebox :: timerevent (qtimerevent * e) {if (e-> minuteride () == closetimer.timerid ()) terminé (0); } code>
à la place, vous pouvez utiliser singleshot code> la minuterie pour fermer n'importe quelle boîte de dialogue ou
qlabel code> avec beaucoup de facilité:
avec ce code:
QObject::connect: Incompatible sender/receiver arguments QTimer::timeout() --> QMessageBox::
Ceci peut aider quelqu'un, la messagerie se ferme après 5 secondes. p> p>