Вот пример:
файл thread.h:
class Thread : public QThread {
Q_OBJECT
public:
Thread();
protected:
void run();
}
файл thread.cpp:
Thread::Thread() {}
void Thread::run() {
// do what ever you want with QTcpSocket
}
в main.cpp или что-то еще:
Thread *myThread = new Thread;
connect(myThread, SIGNAL(finished()), this, SLOT(on_myThread_finished()));
myThread->start();
Установите блокировку QMutex
вокруг всех вызовов, не только для «другого» потока, но и для всех потоков. Один из простых способов сделать это - использовать QMutexLocker
В документации QT явно указано, что QTCPSocket не должен использоваться в потоках. Т.е. создайте QTCPSocket в основном потоке и привяжите сигнал к объекту в другом потоке.
Я подозреваю, что вы реализуете что-то вроде веб-сервера, где прослушивание создает QTCPSocket при приеме. Затем вам нужно, чтобы другой поток выполнял задачу обработки этого сокета. Вы не можете.
Я работал над этим так: я оставил сокет в потоке, в котором он был рожден. Я обслужил все входящие данные в этом потоке и поместил их в очередь, где другой поток мог бы работать с этими данными.