http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/
书籍推荐方式
1、子类化QObject,假设为xObj。
2、子类化QThread,在构造函数中new xObj(),然后再connect相关信号-槽。
3、在QObject子类xObj的构造函数中,创建定时器QTimer,假设为xTimer。再connect相关信号-槽。
4、运行时,xTimer的信号与槽(均在xObj中定义)能正常通信。
5、如果在子类化QThread时,new xObj()不在构造函数中创建对象,而是在run中创建,那么第4步则不能正常通信。这是定时器的特殊情况,如果不用定时器,而是普通信号-槽处理,则此步无影响,在构造函数或者run创建都行。
个人推荐方式
1、子类化QObject,假设为xObj。包括所有信号、槽,定时器等。其中所有需要轮询处理的流程,通过定时器来处理。
2、创建QThread对象xThread,通过xObj->moveToThread将xObj挂到新建的xThread上,即可。
3、特别注意:xObj对定时器等的创建不能在构造函数中创建,否则创建出来的对象的线程是主线程。需要将其放在某个函数(如start ),然后线程(或者 外部程序)通过信号-槽来调用创建。
暂时先记录流程,后续再细化,并补上代码。
2020.01.04记录:
今日发现之前对于子线程和QTimer之类对象的关系又加深一点,记录如下。
1、类中会有各种方法,其中槽最为特殊