Pergunta
Eu estou construindo um projeto Symbian Qt e eu quero mostrar uma notificação para o usuário que deve auto fechar após alguns segundos. Eu vi que a Nokia usa muito isso em sua ui.
Agora eu estou usando o código abaixo para que o usuário pode fechar o QMessageBox mas eu gostaria que ele se era possível auto perto do QMessageBox após 1 ou 2 segundos. Como posso fazer isso usando o Qt?
QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
Solução
gostaria de sugerir a QMessageBox
subclasse para adicionar seu próprio comportamento desejado ...
Seria interessante para adicionar métodos como setAutoClose(bool)
e setAutoCloseTimeout(int)
e desencadear um QTimer
em showEvent
quando a opção AutoClose está habilitado!
Desta forma, você pode até mesmo alterar o apparence do seu QMessageBox
e tinha um texto dizendo "Esta caixa irá fechar automaticamente em segundos XXX ..." ou uma barra de progresso, etc ...
Outras dicas
Graças realmente muito! Minha solução:
Eu criei minha própria classe (MessageBox) este é o meu código para mostrá-lo:
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 é minha 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);
}
}
Em vez disso você pode usar temporizador Singleshot
para fechar qualquer caixa de diálogo ou QLabel
com muita facilidade:
QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));
Com este código:
QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));
você obtém:
QObject::connect: Incompatible sender/receiver arguments
QTimer::timeout() --> QMessageBox::
Becouse MsgBox (o receptor) deve ser um objeto QtCore .. e QMessageBox subclasse QtGui. Consulte https: / /srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html#PySide.QtCore.PySide.QtCore.QTimer.singleShot
Esta ajuda pode alguém,
msgBox.button(QMessageBox::Ok)->animateClick(5000);
Os fecha MESSAGEBOX após 5 segundos.