先贴代码
void TERMINAL_THREAD::run(){
tcpsocket = new QTcpSocket(this);
if(!tcpsocket->setSocketDescriptor(socketDescriptor))
{
qDebug()<<"terminal tcpsocket error";
return;
}
else
{
qDebug()<<"terminal tcpsocket ok";
}
qDebug()<<socketDescriptor;
char buff12[1]={0};
buff12[0]=0x31;
this->tcpsocket->write(buff12,1);
terminal_ip=tcpsocket->peerAddress().toString();
qDebug()<<"ip"<<terminal_ip;
connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(read_tcp()),Qt::DirectConnection);
connect(w,SIGNAL(read_server_sig(QString,QString)),this,SLOT(read_server_slot(QString,QString)));
connect(tcpsocket,SIGNAL(disconnected()),this,SLOT(close_connect()));
connect(tcpsocket,SIGNAL(readChannelFinished()),this,SLOT(close_connect()));
//connect(w,SIGNAL(write(QString)),this,SLOT(write_tcp(QString)),Qt::DirectConnection);
// connect(send_write,SIGNAL(write_send(QString)),this,SLOT(write_tcp(QString)),Qt::DirectConnection);
connect(this,SIGNAL(write(QString)),this,SLOT(write_slot(QString)),Qt::DirectConnection);
exec();}
void TERMINAL_THREAD::write_slot(QString str){
tcpsocket->write(str.toLocal8Bit(),str.length());}
TERMINAL_THREAD::~TERMINAL_THREAD()
{
this->tcpsocket->deleteLater();
}
void TERMINAL_THREAD::close_connect(){
this->exit();
this->terminate();
}
void TERMINAL_THREAD::read_server_slot(QString tcp_ip, QString read_string)
{
QString write_data="["+tcp_ip+"]"+read_string;
this->tcpsocket->write(write_data.toLocal8Bit(),
write_data.length());
}
void TERMINAL_THREAD::write_tcp(QString str){
write_string=str;
istcpsock=true;
this->tcpsocket->write(str.toLocal8Bit(),str.length());
}
void TERMINAL_THREAD::read_tcp(){
QString read_string,ip_tcp;
read_string=this->tcpsocket->readAll();
QTcpSocket *tcpsock2 = tcpsocket;
emit sig_read_tcp(tcpsocket->peerAddress().toString(),read_string);
}
在主线程里面发一个信号调用write_tcp,报QSocketNotifier: socket notifiers cannot be enabled from another thread
请问大神如何解决