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();
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top