QT - signal readyRead() de QT

 
Vista:

signal readyRead() de QT

Publicado por Kike (1 intervención) el 11/11/2005 11:41:11
Estoy probando a leer de un socket q he creado, y no puedo de ninguna manera, pero he comprobado que el servidor al que me conecto si que me envia información.
Este es el código que utilizo.

#ifndef CLIENTTHREAD_H
#define CLIENTTHREAD_H

#define CLIENTTHREAD_TIMEOUT 3000 //Timeout TCP

#include <QtCore>
#include <QtNetwork>
#include <unistd.h>
#include <QFileDialog>
#include <QAbstractSocket>

class TClientThread : public QThread
{
Q_OBJECT

public:
TClientThread(QObject * parent=0);
void run();

signals:
void error(QTcpSocket::SocketError socketError);


private:
bool quit;
QTcpSocket *tcpSocket;

private slots:
void Conectado();
void Leer();

};

#endif
-------------------------------------------------------------------
#include "clientthread.h"

TClientThread::TClientThread(QObject *parent )
: QThread(parent),quit(false)
{
}

void TClientThread::run(){
tcpSocket=new QTcpSocket;
qDebug()<<"THREAD";

connect(tcpSocket,SIGNAL(connected()),
this,SLOT(Conectado()));
connect(tcpSocket,SIGNAL(readyRead()),
this,SLOT(Leer()));

tcpSocket->connectToHost("localhost",(qint64)65001);
if (!tcpSocket->waitForConnected(5000)) {
}


QString qsReply="OK";
tcpSocket->write(qsReply.toAscii().data(), qsReply.size()+1);
}


void TClientThread::Conectado(){
qDebug()<<"Conectado!!!!";
}

void TClientThread::Leer(){
int leido;
char data[1024];
qDebug()<<"LEER";
leido=tcpSocket->read(data,1024);
qDebug()<<"LEIDO="<<leido;
while(leido!=0){
leido=tcpSocket->read(data,1024);
qDebug()<<"LEIDO="<<leido;
}
}

Como veis lo que hago es un connect para que cuando el socket este conectado ,es decir cuando se activa la señal connected() que haga el slot Conectado(). Hasta ahi me va bien.
Pero hago lo mismo con la señal readyRead(), que se supone que se activa cuando en el socket hay algo disponible para leer, y pasa de mi. Es como si nunca se activara.
Alguna sugerencia, es que no se estoy haciendo mal.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:signal readyRead() de QT

Publicado por lol (1 intervención) el 10/12/2008 14:17:47
Prueba a leer desde el socket con un objeto de la clase QTextStream.Yo leo desde un socket así:
QTextStream *paraLeer;
QString mensajeLeido;

Y esto lo metería dentro del SLOT que salta al capturar la señal de readyRead();
mensajeLeido.append(paraLeer->readAll());
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar