首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++连接未被触发

C++连接未被触发
EN

Stack Overflow用户
提问于 2021-02-16 17:57:25
回答 2查看 61关注 0票数 0

我正试着玩C++中的基本信号/插槽。

下面是我的Network-Manager,,它将触发事件:

代码语言:javascript
复制
class NetworkManager : public QObject {
Q_OBJECT
public:
    explicit NetworkManager(QApplication* application);
    void OnFinished(QNetworkReply *reply);
    ...
signals:
    void OnReceived();
};

Display-Manager,中,该类将接收以下事件:

代码语言:javascript
复制
class DisplayManager : public QObject{
Q_OBJECT
public:
    explicit DisplayManager(QApplication *app);
    void ChangeWallPaper();
public slots:
    void ReceiveData();
};

我正试着从另一个班联系起来:

代码语言:javascript
复制
Manager::Manager(QApplication *application, NetworkManager networkManager, DisplayManager displayManager)
: networkManager(application),displayManager(application) {
    ...
    connect(&networkManager, &NetworkManager::OnReceived, &displayManager, &DisplayManager::ReceiveData);
}

在这些类的实现中:

代码语言:javascript
复制
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没有被调用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-17 19:48:25

以下是解决方案

代码语言:javascript
复制
Manager::Manager(QApplication *application,
                 NetworkManager _networkManager,
                 DisplayManager _displayManager)
        : networkManager(application)
        , displayManager(application)
{
    ...
    connect(&networkManager, &NetworkManager::OnReceived,
            &displayManager, &DisplayManager::ReceiveData);
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-16 18:04:05

考虑一下您的Manager构造函数..。

代码语言:javascript
复制
Manager::Manager(QApplication *application,
                 NetworkManager networkManager,
                 DisplayManager displayManager)
    : networkManager(application)
    , displayManager(application)
{
    ...
    connect(&networkManager, &NetworkManager::OnReceived,
            &displayManager, &DisplayManager::ReceiveData);
}

将本地作用域变量networkManagerdisplayManager的地址传递给connect。当这些临时变量在构造函数完成时超出作用域时,连接就会被销毁。

尝试通过引用或指针传递networkManagerdisplayManager

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66229679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档