Qt 定时器一个烦人的地方就是创建定时器和释放定时器要在同一线程,否则就会报如下错误:

QObject::~QObject: Timers cannot be stopped from another thread
QObject::~killTimer: Timers cannot be stopped from another thread

报错就报错吧,关键是没有任何上下文信息,如果你的程序里有很多地方在用定时器,排查起来就很难了。今天又遇到了这个问题,排查了很久也没找到是哪里报出来的。

正当一筹莫展的时候,突然想到用 Qt 源码调试根据堆栈信息或许能找到出错的源头。于是上网搜了下怎么调试 Qt 源码,只需两个步骤即可:

  1. 安装 Qt 时选择了源码
  2. 打开 Qt Creator->Tools->Options->Debugger->General->Source Paths Mapping,点击 Add Qt sources... 按钮,选择 Qt 源码目录即可

再次以调试模式启动程序,在合适的地方打下断点,发现已经可以进入 Qt 源码进行调试了。

源码都能调试了,这个问题就已经不是问题了,三下五除二就找出报错的地方:-)。