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();
}
我已将来自 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();
}