1.QTimer::SingleShot()
不执行槽函数原因
1.域内调用不能带域名。
QTimer::singleShot(5000, this, SLOT(CompareData::slotdownPower()));
2.必须是SLOT函数,普通成员函数无法使用。
3.槽函数不能有参数,因为QTimer的timeout信号是没有参数的。
QTimer::singleShot(5000, this, SLOT(CompareData::slotdownPower(val)));
4.QTimer::singleShot()可以不用声明实例。
无法停止及计时器的循环计时
1.QTimer::SingleShot()是静态成员函数,与实例对象无关,所以stop和killTimer都无法停止。如果靠它实现了循环想要停止,可以设置标志位,满足条件才执行singleShot(),但实际上定时器并没有停止。如果你通过标志位来控制,也存在重复执行的风险,当你多次执行重复含有singleShot()的函数,并设置了标志位停止。当你距离上一次停止的时间不到间隔时间又开始执行,由于此时标志位时可以通过的,上一次停止的和这一次新设置的会重复执行槽函数。
2.如果要实现定时器循环马上停止,还是得用connect+start。可以在槽函数中第一句就析构掉上一个qtimer指针(需要设置一个qtimer指针),然后重新创建qtimer。注意这里killTimer()没用,还是有重复执行的风险,具体原因不知道,可能killTimer()没有析构完全?