1.QT里模板类和Q_OBJECT存在冲突。如果有实际需求,可以去实现一个非模板类的基类,在这个类中定义信号槽,最后由模板类继承该基类。
2.quit()函数
程序里构造了子线程类,且调用quit()作为退出方式的时候,quit应该放在子线程类的析构函数中,当子线程结束(比如run函数运行结束线程结束),自动调用析构,就完成了线程的退出。
如果通过信号槽来实现主线程通知子线程调用quit进行退出,注意不要在槽函数中执行qui。在槽函数中执行quit,实际上相当于在主线程内调用quit,是对主线程执行quit,并不是对子线程执行quit
3.线程冲突——QObject: Cannot create children for a parent that is in a different thread.
(Parent is xxx(0x5c12d0), parent's thread is QThread(0x317705a0), current thread is YYY(0x5c1220)
原因:在我的程序中,xxx是继承QThread的单例模式类,YYY是主线程。
xxx的一个成员函数通过new申请空间的时候,使用了this作为参数,这时这个this就指向的是xxx自己生成的子线程的空间
但是当YYY主线程调用xxx类对应函数的时候,这时再newQNetworkAccessManager实例,this参数就变成指向主线程的空间
这是个异常,不是bug,暂时没有让程序崩溃。