Frage
Ich baue ein Qt Symbian-Projekt und ich mag eine Benachrichtigung für den Benutzer zeigen, dass sollte automatisch schließen nach einigen Sekunden. Ich habe gesehen, dass Nokia diese viel in ihrer ui verwendet.
Im Moment verwende ich den Code unten, so dass der Benutzer die QMessageBox schließen kann, aber ich würde es gerne, wenn es in der Nähe der QMessageBox nach 1 oder 2 Sekunden Auto möglich ist. Wie kann ich dies mit Qt tun?
QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
Lösung
Ich würde wieder in Unterklasse QMessageBox
vorschlägt Ihr eigenes gewünschtes Verhalten hinzufügen ...
Es wäre interessant Methoden wie setAutoClose(bool)
und setAutoCloseTimeout(int)
hinzuzufügen und eine QTimer
auf showEvent
auslösen, wenn die Autoclose-Option aktiviert ist!
Auf diese Weise könnte man sogar die apparence Ihrer QMessageBox
ändern und hatte einen Text sagen „Dieses Feld automatisch in XXX Sekunden schließt ...“ oder eine Statusanzeige, etc ...
Andere Tipps
Danke wirklich viel! Meine Lösung:
habe ich meine eigene Klasse (MessageBox) dies ist mein Code ist es für die Ansicht:
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();
Das ist meine Klasse:
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);
}
}
Sie können stattdessen Singleshot
Timer verwenden, um alle Dialogfeld oder QLabel
mit viel Leichtigkeit zu schließen:
QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));
Mit diesem Code:
QTimer *timer;
QTimer::singleShot(10000, msgBox, SLOT(close()));
Sie erhalten:
QObject::connect: Incompatible sender/receiver arguments
QTimer::timeout() --> QMessageBox::
Becouse MSGBOX (Empfänger) muss ein QtCore Objekt sein .. und QMessageBox Subklassen QtGui. Siehe https: / /srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html#PySide.QtCore.PySide.QtCore.QTimer.singleShot
Dies kann helfen, jemand,
msgBox.button(QMessageBox::Ok)->animateClick(5000);
Die messageBox schließt nach 5 Sekunden.