2011-03-01 14 views
8

Intento iniciar el temporizador a una hora específica como 02:30. Todos los días comienza a las 02.30.QTimer start tiempo específico

¿Es posible? ¿Tiene alguna idea?

Muchas gracias.

Respuesta

9

QTimer no maneja horas específicas del día de forma nativa, pero puede usarlo junto con QDateTime para obtener lo que desea. Es decir, utilice objetos QDateTime para calcular cuántos segundos hay entre (ahora) y 2:30 (QDateTime :: msecsTo() parece particularmente apropiado aquí), luego configure su QTimer para que se apague después de esos muchos segundos. Repita según sea necesario.

+0

Esto falla cuando el dispositivo entra en suspensión mientras el temporizador se está ejecutando. Se ejecutará demasiado tiempo entonces. – ypnos

6

Dependiendo de la resolución requerida, puede usar un QTimer ordinario que dispare, digamos cada minuto.
En timerEvent, puede verificar si está en el momento correcto (utilizando QDateTime) y desencadenar el evento necesario.

+1

Este enfoque es menos elegante que @ Jeremy, pero proporciona una ventaja adicional de no romperse si el usuario decide restablecer el reloj del sistema. – Septagram

1

La solución de Jeremy es realmente elegante, pero no tiene en cuenta el horario de verano. Para protegerse de eso, debe disparar un evento de temporizador cada hora y comprobar el reloj de pared. Calcule el delta con el objetivo, como propone Jeremy, y si cae dentro de la hora venidera, configure un temporizador para disparar y desactive el temporizador horario.
Si no, solo espere a que el temporizador horario vuelva a disparar.

Pseudo code: 

Get wall clock time 
Calculate difference between target time and wall clock 
If difference < 1 hour: 
    Set timer to fire after difference secs 
    If this is a repeating event, restart the hourly timer 
Else: 
    Start watch timer to do this calculation again after one hour