class ObjTest:public QObject
{
Q_OBJECT
public:
void FunTest(){
qDebug()<<"FunTest"<<this->thread()->currentThread();
QMetaObject::invokeMethod(this,"slotTest",Qt::AutoConnection);
}
public slots:
void slotTest(){
qDebug()<<"slotTest"<<this->thread()->currentThread();
// QMessageBox::about(0,0,0);
}
signals:
void sigTest();
};
class Test:public QThread
{
void run()override
{
ObjTest* pOBj = new ObjTest();
// pOBj->moveToThread(qApp->thread());
pOBj->FunTest();
}
};
启动Test线程,FunTest和槽函数都在子线程执行
main Thread: QThread(0x18c10129bb0)
FunTest QThread(0x32267cfdc0)
slotTest QThread(0x32267cfdc0)
如果放开注释代码pOBj->moveToThread(qApp->thread());那么FunTest()在子线程中执行,回调的槽函数在主线程中执行,也可以在槽函数中显示窗口了
main Thread: QThread(0x19d8b619fd0)
FunTest QThread(0x3013aff680)
slotTest QThread(0x19d8b619fd0)