我正试着玩C++中的基本信号/插槽。
下面是我的Network-Manager,,它将触发事件:
class NetworkManager : public QObject {
Q_OBJECT
public:
explicit NetworkManager(QApplication* application);
void OnFinished(QNetworkReply *reply);
...
signals:
void OnReceived();
};在Display-Manager,中,该类将接收以下事件:
class DisplayManager : public QObject{
Q_OBJECT
public:
explicit DisplayManager(QApplication *app);
void ChangeWallPaper();
public slots:
void ReceiveData();
};我正试着从另一个班联系起来:
Manager::Manager(QApplication *application, NetworkManager networkManager, DisplayManager displayManager)
: networkManager(application),displayManager(application) {
...
connect(&networkManager, &NetworkManager::OnReceived, &displayManager, &DisplayManager::ReceiveData);
}在这些类的实现中:
void DisplayManager::ReceiveData() {
std::cout << "being called" << std::endl;// to check if this is being called
}
void NetworkManager::OnFinished(QNetworkReply *reply) {
OnReceived(); // to trigger
}
// OnReceived() not implemented as it just a signal我在这里遗漏了什么,为什么ReceiveData没有被调用?
发布于 2021-02-17 19:48:25
以下是解决方案:
Manager::Manager(QApplication *application,
NetworkManager _networkManager,
DisplayManager _displayManager)
: networkManager(application)
, displayManager(application)
{
...
connect(&networkManager, &NetworkManager::OnReceived,
&displayManager, &DisplayManager::ReceiveData);
}发布于 2021-02-16 18:04:05
考虑一下您的Manager构造函数..。
Manager::Manager(QApplication *application,
NetworkManager networkManager,
DisplayManager displayManager)
: networkManager(application)
, displayManager(application)
{
...
connect(&networkManager, &NetworkManager::OnReceived,
&displayManager, &DisplayManager::ReceiveData);
}将本地作用域变量networkManager和displayManager的地址传递给connect。当这些临时变量在构造函数完成时超出作用域时,连接就会被销毁。
尝试通过引用或指针传递networkManager和displayManager。
https://stackoverflow.com/questions/66229679
复制相似问题