2011-03-01 80 views
8

我试图在02:30的特定时间启动计时器。每天从02:30开始。QTimer启动特定时间

可能吗?你有什么主意吗?

非常感谢。

回答

9

QTimer本身并不处理特定的时间,但您可以将它与QDateTime结合使用以获取所需内容。也就是说,使用QDateTime对象来计算(现在)和2:30(QDateTime :: msecsTo()在这里看起来特别合适的秒数),然后设置你的QTimer在几秒钟后关闭。必要时重复。

+0

当定时器运行时设备进入暂停状态时,此操作将失败。它会跑得太久。 – ypnos 2017-01-18 12:02:45

6

根据所需的分辨率,你可以使用一个普通的QTimer,让我们说每分钟。
在timerEvent中,你可以检查你是否在正确的时间(使用QDateTime),并触发必要的事件。

+1

这种方法不如@Jeremy's那么优雅,但它提供了额外的好处,不会中断用户是否决定重置系统时钟。 – Septagram 2011-03-01 11:48:11

1

杰里米的解决方案确实很优雅,但它没有考虑夏令时。 为了防范这种情况,您应该每隔一小时启动一次计时器事件并检查挂钟。 计算目标的增量,就像Jeremy提出的那样,如果它落在下一个小时内,设置一个计时器来触发,并禁用小时计时器。
如果没有,请等待小时计时器再次启动。

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