Qt 信号如何在多层次对象间传递?

比如说

class C {
signals:
    void clicked();
};
class B {
    C c;
};
class A {
    B b;
};

现在想在A实例中响应C的信号,如何优雅的层层传递?直接将组合类改成public属性,还是在每个类里面实现clicked()信号,层层connent传递?
方案一:

class C {
signals:
    void clicked();
};
class B {
public:
    C c;
};
class A {
public:
    A() {
        // 这里直接把b中的c暴露出来
        connet(&b.c, &C::clicked, this, &A::onClicked);
    }
private slots:
    void onClicked();
private:
    B b;
};

方案二:

class C {
signals:
    void clicked();
};
class B {
signals:
    void clicked();
public:
    B() {
       //由b来中转信号
        connet(&c, &C::clicked, this, &B::clicked);
    }
private:
    C c;
};
class A {
public:
    A() {
        //直接连接到b,不用关心内部是否由c来发射信号
        connet(&b, &C::clicked, this, &A::onClicked);
    }
private slots:
    void onClicked();
private:
    B b;
};
阅读 5.5k
1 个回答

你的两个方案我都没用过,一般我是这样的
Qt中信号是所有人可见的,在C中可以创建一个信号,并在clicked时发射它,在A中用槽关联该信号产并作出响应

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题