QT QSocketServer 多线程信号与槽不触发

问题遇到的现象和发生背景

我用QTcpServer通讯,代码全写窗体里就没问题, 但是我把TCP功能写在Worker类然后加入线程,可以连接但是 readyRead , error 信号都触发不了

问题相关代码,请勿粘贴截图
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    g_tcpSocket = new QTcpSocket(this);
    connect(g_tcpSocket, &QTcpSocket::readyRead, [&]() {
        if (g_tcpSocket->isOpen()) //读取数据OK
        {
        }
        });
    connect(g_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(sl_readerror(QAbstractSocket::SocketError)));
    g_tcpSocket->connectToHost("127.0.0.1", 9120);
    g_tcpSocket->waitForConnected(30000);

    isConnected = false;
    m_pthread = new QThread(this); //进程类
    m_pworker = new Worker(); //工作类
    m_pworker->moveToThread(m_pthread); //将工作类加入进程中.
    connect(m_pthread, &QThread::finished,m_pworker,&QObject::deleteLater);
    connect(this, SIGNAL(sg_dowork()), m_pworker, SLOT(sl_dowork()));
    connect(m_pworker, SIGNAL(sg_finish()), this, SLOT(sl_finish()));
    connect(m_pthread, SIGNAL(started()), m_pworker, SLOT(sl_dowork()));
    m_pthread->start();
}
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::sl_finish()
{

}

void Dialog::sl_readerror(QAbstractSocket::SocketError)
{
    QMessageBox::information(this, "MSG", "Error");
}
#include "worker.h"

Worker::Worker(QObject* parent /*= NULL*/)
{
    m_tcpSocket = new QTcpSocket(this);
    connect(m_tcpSocket, SIGNAL(readyRead()), this, SLOT(sl_msgfromhost()));
    connect(m_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(sl_readerror(QAbstractSocket::SocketError)));
}

Worker::~Worker()
{

}

void Worker::sl_dowork()
{
    while (true)
    {
        doConnect();
        QThread::msleep(5000);
    }
}
void Worker::sl_readerror(QAbstractSocket::SocketError)
{
    isConnected = false;
    m_tcpSocket->disconnectFromHost();
}
void Worker::doConnect()
{
    if (isConnected)
        return ;
    m_tcpSocket->connectToHost(g_Address, g_PORT);
    isConnected=m_tcpSocket->waitForConnected();//如
}
void Worker::sl_msgfromhost()
{
    if (m_tcpSocket->isOpen())
    {
    }
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

while (true)
{
doConnect();
QThread::msleep(5000);
}
这个会导致线程卡主了