在做多线程的时候遇到这样的问题,提示“Timers can only be used with threads started with QThread”。
问题描述:在子线程中需要用到一个定时器,刚开始是这样写的,报错了:
MyThread::run<span style="font-family: Arial, Helvetica, sans-serif;">()</span>
{
readTimer = new QTimer();
readTimer->setInterval(2000);
readTimer->setSingleShot(true); //不重复执行
connect(readTimer, SIGNAL(timeout()), this, SLOT(onTimerOut()));
}
结果就报错"Timers can only be used with threads started with QThread",意思是说只能在一个线程中使用定时器~
瞬间无语了~再找了一遍确定是只有在子线程中使用到这个定时器啊~于是就继续百度这个问题,英文一大堆,就是没找到个靠谱的~偏偏就不信没有解决方案了~
于是就再看了遍代码,发现了定时器的定义都放在run()中,难道是这个原因?果断将这些定义全部搬到构造函数中,一运行,就没有任何错误了。
有时候问题很小,要是没细心、耐心去找,就无法解决问题~