比如说
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;
};
你的两个方案我都没用过,一般我是这样的
Qt中信号是所有人可见的,在C中可以创建一个信号,并在clicked时发射它,在A中用槽关联该信号产并作出响应