qt收不到信号

Can't receive signal in qt

我已将来自 class 客户端的插槽连接到来自 class ClientNetwork 的信号,但它不工作

客户class:

Client::Client(QString &ip, quint16 port)
{
    clientNetwork = new ClientNetwork(ip,port);
    connect(clientNetwork, &ClientNetwork::clientConnected, this, &Client::connected); 
}
void Client::connected()
{
    qDebug()<<"clientConnected signal received"; //This qDebug is not showing
}

和客户端网络class:

ClientNetwork::ClientNetwork(QString &hostIp, quint16 hostPort)
    : port(hostPort), ip(hostIp)
{
    ................
    ...code.........
    ................

    emit clientConnected(); // emit signal
    qDebug()<<"Client::clientConnected"; // this qDebug is showing
}

为什么收不到信号?

class Client 的构造函数被调用时,它首先创建一个 ClientNetwork ,您已经在其中发出信号 clientConnected 并且仅在此之后 [=14= 之间的连接]并且Client::connected成立。

所以基本上问题是当信号发出时信号和插槽之间没有建立连接

如果clientConnected()是一个public信号,那么你可以在Client的构造函数中执行以下操作:

Client::Client(QString &ip, quint16 port)
{
   clientNetwork = new ClientNetwork(ip,port);
   connect(clientNetwork, &ClientNetwork::clientConnected, this, &Client::connected);
   emit clientNetwork->clientConnected();
   //or call a public method of Client which does that for you depending on your design.
}

您在将客户端连接到 ClientNetwork 之前发出信号 clientConnected()。 您可以通过在发出任何 clientConnected() 信号之前在 ClientNetwork Construct 上建立连接并传递 Client 指针或对 ClientNetwork 构造函数的引用来解决此问题,但我不建议这样做。

最好的方法是从构造函数中删除所有连接处理,并在您的 ClientNetwork class 中创建一个 "connect" 方法,您将在连接 signal/slot 客户端 class :

Client::Client(QString &ip, quint16 port)
{
  clientNetwork = new ClientNetwork(ip,port);
  connect(clientNetwork, &ClientNetwork::clientConnected, this, &Client::connected); 
  clientNetwork->connect();
}