问题遇到的现象和发生背景
我用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())
{
}
}