8 Stimmen

QTimer start spezifische Zeit

Ich versuche, den Timer um eine bestimmte Zeit wie 02:30 zu starten. Jeden Tag startet er um 02:30.

Ist das möglich? Haben Sie eine Idee?

Vielen Dank.

9voto

Jeremy Friesner Punkte 63019

QTimer behandelt spezifische Tageszeiten nicht nativ, aber Sie könnten es in Verbindung mit QDateTime verwenden, um zu bekommen, was Sie wollen. Das heißt, verwenden Sie QDateTime-Objekte, um herauszufinden, wie viele Sekunden (gerade jetzt) und 2:30 Uhr liegen (QDateTime::msecsTo() scheint hier besonders passend zu sein), dann stellen Sie Ihren QTimer so ein, dass er nach dieser Anzahl von Sekunden abläuft. Wiederholen Sie dies bei Bedarf.

6voto

Kurt Pattyn Punkte 2712

Je nach erforderlicher Auflösung könnten Sie einen gewöhnlichen QTimer verwenden, der beispielsweise alle Minute ausgelöst wird.
Im timerEvent könnten Sie überprüfen, ob Sie zur richtigen Zeit sind (mit QDateTime) und das erforderliche Ereignis auslösen.

1voto

Kurt Pattyn Punkte 2712

Die Lösung von Jeremy ist in der Tat elegant, aber sie berücksichtigt nicht die Sommerzeit. Um dagegen vorzugehen, sollten Sie jedes Stunden ein Timer-Ereignis auslösen und die Uhrzeit überprüfen. Berechnen Sie den Unterschied zum Ziel, wie Jeremy vorschlägt, und wenn er innerhalb der nächsten Stunde liegt, stellen Sie einen Timer ein, und deaktivieren Sie den stündlichen Timer.
Wenn nicht, warten Sie einfach darauf, dass der stündliche Timer wieder auslöst.

Pseudo-Code:

Holen Sie die Uhrzeit
Berechnen Sie den Unterschied zwischen der Zielzeit und der aktuellen Uhrzeit
Wenn der Unterschied < 1 Stunde beträgt:
    Setzen Sie den Timer, um nach Differenz Sekunden auszulösen
    Wenn es sich um ein wiederholendes Ereignis handelt, starten Sie den stündlichen Timer neu
Andernfalls:
    Starten Sie den Überwachungstimer, um diese Berechnung nach einer Stunde erneut durchzuführen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X