ich beschäftige mich seit ca einer Woche mit QT und bin gerade dabei mit den Network Beispielen eine bisschen zu experimentieren. Dabei bin ich jetzt auf ein Problem mit SIGNAL und SLOT gestoßen.
Im Endeffekt ist es so, dass ich eine Klasse ChatServer habe die vom QTcpServer erbt. Diese Klasse erstellt bei einer neuen Verbindung(also wenn incomingConnection(socketId) ausgelst wird) einen Pointer auf ein Objekt der Klasse ClientSocket die vom QTcpSocket erbt. Nun möchte ich das Signal messageReceived(QString) vom ClientSocket mit dem Slot messageFromClient(QString) com ChatServer verbinden.
Aber beim Debuggen kommt immer in der Connect Zeile folgende Ausgabe:
"Object::connect: No such slot QTcpServer::messageFromClient(QString)"
und folglich wird die Verbindung auch nicht erstellt. Die incommingConnection Methode is ja eine Methode des QTcpServers, deswegen wird sich der this Pointer in der connect Zeile auf den QTcpServer beziehen, da ja seine Methode aufgerufen wurde.
Aber wie kann ich das ändern?
Ich hoff mal das ich hier ned zu blöd frag.
Hier noch der Source der ChatServer.h:
Code: Alles auswählen
#ifndef CHATSERVER_H
#define CHATSERVER_H
#include <QTcpServer>
#include <QString>
class ChatServer: public QTcpServer
{
public:
ChatServer(QObject *parent = 0);
virtual ~ChatServer();
protected slots:
void messageFromClient(QString message);
private:
void incomingConnection(int socketId);
};
#endif
Code: Alles auswählen
#include "ChatServer.h"
#include "ClientSocket.h"
ChatServer::ChatServer(QObject *parent):QTcpServer(parent)
{
}
ChatServer::~ChatServer()
{
}
void ChatServer::incomingConnection(int socketId)
{
ClientSocket *socket = new ClientSocket(this);
socket->setSocketDescriptor(socketId);
connect(socket, SIGNAL(messageReceived(QString)), this, SLOT(messageFromClient(QString))); //HIER IST DAS BESCHRIEBEN PORBLEM
}
void ChatServer::messageFromClient(QString message)
{
}
Wär echt Klasse wenn ihr nen Tipp hättet
Vielen Dank