Russian Qt Forum

Qt => Вопросы новичков => Тема начата: unduty от Декабрь 13, 2020, 16:46



Название: QTcpSocket readyRead в потоке класса QObject
Отправлено: unduty от Декабрь 13, 2020, 16:46
Доброе время суток , передаю в поток объект и создаю в нем клиента QTcpSocket, на отправку работает.
Ни как не получается подписаться на readyRead() , насколько понимаю связанно это с типом объекта, как быть ?

Вызов:
Код:
    QThread *socketThread = new QThread();
    socketTcpIp *socketObj = new socketTcpIp();
    socketObj->moveToThread(socketThread);
    connect(socketThread, &QThread::started, socketObj,  &socketTcpIp::init);
    socketThread->start()

H файл
Код:
#ifndef THREADIPCLIENT_H
#define THREADIPCLIENT_H

#include <QObject>
#include <QTcpSocket>

class socketTcpIp : public QObject
{
    Q_OBJECT
   
     
protected:
      virtual void statstateChanged();
      virtual void readyRead();

private:
      QString clientName;

public:
   
      QTcpSocket* socket = 0;

public slots:
      void init();

};

#endif // THREADIPCLIENT_H

cpp файл

Код:
socketTcpIp::socketTcpIp(QObject *parent) :   QObject(parent)
{

}

void socketTcpIp::init()
{
    socket = new QTcpSocket(this);
}

void socketTcpIp::readyRead()
{
    qDebug() << "ОК";
}

пробовал так
Код:
connect(socket,SIGNAL(readyRead()),this,SLOT(ready_Read()));
вызывают такую ошибку
Код:
error: called object type 'socketTcpIp:: is not a function or function pointer


Название: Re: QTcpSocket readyRead в потоке класса QObject
Отправлено: tux от Декабрь 13, 2020, 17:28
Ну, слота ready_Read действительно нет. :)
Хотя, лучше использовать более новый способ связывания. Довольно удобный.
https://wiki.qt.io/New_Signal_Slot_Syntax


Название: Re: QTcpSocket readyRead в потоке класса QObject
Отправлено: unduty от Декабрь 13, 2020, 19:47
Спасибо, новый метод указал на ошибку подробно, все заработало.