我有2个班级:
class Server : public QTcpServer
{
Q_OBJECT
public:
Server(QObject * parent = 0 , quint16 port = 1922);
void SendData(QString data);
virtual ~Server();
signals:
void RecieveMessage(QString);
private slots:
void acceptConnection();
void startRead();
void disconnected();
private:
QTcpServer *tcpServer;
QTcpSocket *client;
};
和
class ChessLanTEst : public QMainWindow
{
Q_OBJECT
public:
friend class Server;
friend class Client;
ChessLanTEst(QWidget *parent = 0);
~ChessLanTEst();
private:
Ui::ChessLanTEstClass ui;
Server *server_;
Client *client_;
private slots:
void createGame();
void ShowMessage(QString);
};
在Server类中我有信号:
void RecieveMessage(QString);
在ChessLanTEst课程中我有插槽:
void ShowMessage(QString);
我在ChessLanTEst构造函数中连接它:
connect(server_, &Server::RecieveMessage, this, &ChessLanTEst::ShowMessage);
但是我没有收到这个信号,我不知道为什么。
答案 0 :(得分:3)
基于注释,您在server_
之前发出构造函数,之前 connect
(因为如果server_
指针中有有效值,构造函数已返回)。
发送自己不会排队,必须在发出之前完成连接才能调用插槽(或排队的呼叫)。
答案 1 :(得分:2)
您需要使用SIGNAL和SLOT宏。像:
connect(server_, SIGNAL(RecieveMessage(QString)), this, SLOT(ShowMessage(QString)));
如果您搜索这些宏的定义,您会发现参数实际上已转换为字符串。