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.
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
0