QTimer timeout() 方法在代码重组后不再触发

Posted

技术标签:

【中文标题】QTimer timeout() 方法在代码重组后不再触发【英文标题】:QTimer timeout() method no longer firing after code restructure 【发布时间】:2019-12-10 03:09:36 【问题描述】:

我最近重新格式化了我的一些代码以提高可读性。我的 MainWindow 类中有代码来处理触摸事件。在这些函数中,有一个 pinchZoom 函数,它在我进行更改之前就可以使用。我将代码移到了一个 QObject 的单例类中。

当检测到 pinchZoom 时,相关的小部件(由 QApplication::widgetAt() 找到)调用它的 pinchZoom() 方法,该方法停止然后重新启动单次 QTimer。 QTimer 的timeout() 方法连接到一个插槽,该插槽执行实际的缩放和更新视图。这样我就可以在实际的捏缩放手势和视图更新之间添加延迟。

在移动我的代码之前,这个timeout() 信号工作得很好,并且触发了缩放方法。然而,尽管没有触及信号/槽连接,timeout() 方法触发的缩放槽不再被调用。 timeout() 信号和插槽之间的实际连接是在计时器所在的小部件的构造函数中完成的。

我已经检查过了,信号/插槽连接返回 true,所以连接就在那里。

发生这种情况有什么原因吗?这是否与正在启动的 QTimer 现在发生在单例类中而不是 MainWindow 类中的事实有关?

【问题讨论】:

【参考方案1】:

似乎问题在于我的单例类位于单独的线程上,并且无法从单独的线程触发 QTimer。我只是在原来的 MainWindow 类中设置了一个槽来接受来自单例类的信号,然后调用捏缩放方法。现在工作正常。

【讨论】:

以上是关于QTimer timeout() 方法在代码重组后不再触发的主要内容,如果未能解决你的问题,请参考以下文章

2.6.4 Qtimer定时器介绍

QT中的Qtimer 里start(100)开始计时以后,timeout是只触发一次,还是说每到100ms就触发一次??

QTimer在QThread中失效

QTimer 不触发(触发)超时

七.PyQt5定时器QTimer的使用

QTimer 线程亲和性