gpt4 book ai didi

c++ - Qt转发信号/槽连接

转载 作者:行者123 更新时间:2023-11-30 01:10:17 25 4
gpt4 key购买 nike

假设 SomeClass 有成员 Object1Object2 并且 Object1 之间有一个连接对象 2 喜欢:

connect(Object1, signal1, Object2, slot1)

经过一些重构 Object3 被添加到 SomeClass 并且 Object2 被移动成为 Object3 的成员,但仍然需要在 Object1Object2 之间建立连接。

Object1Object2 之间的通信现在必须通过Object3。这意味着 Object3 需要修改,添加一对信号/槽来实现 Object1Object2 之间的通信。

这意味着 Object3 的 .h 和 .cpp 都将被修改,添加多行代码来完成以前只需一行即可完成的事情。

我懒惰的一面是说这个故事有些奇怪。有什么方法可以使这种联系更直接吗?

最佳答案

您正在将 Object2 封装在 Object3 中。从Object3用户 的角度来看,没有任何变化:仍然只有一行代码来建立连接。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com