假设SomeClass
具有成员Object1
和Object2
,并且Object1
和Object2
之间存在联系,例如:
connect(Object1, signal1, Object2, slot1)
在
Object3
中添加了一些重构SomeClass
并将Object2
移至Object3
的成员之后,但仍然需要Object1
和Object2
之间的连接。Object1
和Object2
之间的通信现在必须通过Object3
进行。这意味着Object3
需要修改,添加一对信号/插槽,仅用于实现Object1
和Object2
之间的通信。这意味着
Object3
的.h和.cpp都将被修改,添加多行代码以完成以前仅用一行完成的操作。我懒惰的一面说这个故事有些奇怪。有什么办法可以使这种联系更加直接吗?
最佳答案
您正在将Object2
封装在Object3
中。从Object3
用户的 Angular 来看,没有任何变化:建立连接的代码仍然只有一行。 Object3
需要一个额外的插槽,以转发到现在封装的Object2
实例。这是额外的一行。就是这样。
struct Object1 : QObject {
Q_SIGNAL void signal1();
Q_OBJECT
};
struct Object2 : QObject {
Q_SLOT void slot1() {}
Q_OBJECT
};
class Object3 : QObject {
Q_OBJECT
Object2 m_object2;
public:
// one line to expose object2's slot
Q_SLOT void slot1() { m_object2.slot1(); }
};
class SomeClass {
Object1 m_object1;
Object3 m_object2;
public:
SomeClass() {
// still one line
connect(&m_object1, &Object1::signal1, &m_object3, &Object3::slot1);
}
};
关于c++ - Qt转发信号/插槽连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38251956/