如何使用killTimer终止QTimer运行及相关报错解决方案
问题原因
killTimer是QObject类的受保护成员方法,仅能用来终止当前对象自身通过QObject::startTimer()接口创建的定时器。你代码中拿到的timerId归QTimer实例对象所有,不属于你调用killTimer的MainWindow对象,因此MainWindow没有权限操作这个id对应的定时器,就会抛出id无效的错误。QTimer内部会自行维护定时器生命周期,它的定时器本质是QTimer实例自己调用startTimer注册的,所有权完全归属QTimer实例,外层对象无权直接操作。
解决方案
优先使用QTimer自带的stop()方法终止定时器,这是Qt官方推荐的标准用法,不需要手动处理定时器id:
timer->start(1000); // 需要终止定时器时直接调用stop接口即可 timer->stop();
如果你确实需要使用killTimer接口,只能针对当前对象自己创建的定时器使用:如果你是在MainWindow中直接调用startTimer(1000)创建的定时器,拿到的id才可以用当前MainWindow的killTimer来终止,示例如下:
// MainWindow类中直接启动全局定时器 int timerId = startTimer(1000); // 终止时调用当前对象的killTimer killTimer(timerId);
内容的提问来源于stack exchange,提问作者ricardo
相关产品推荐
相关产品推荐

