Qt转发信号/插槽连接
Qt Forwarding signal/slot connections
假设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
用户的角度来看,没有任何变化:仍然只有一行代码来设置连接。 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);
}
};
相关文章:
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- QObject::连接无法将信号连接到*this*对象的插槽
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- 使用std::bind将Qt信号连接到插槽
- 使用信号和插槽连接多个 UI 对象
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qt转发插槽/连接插槽到插槽?
- 如何使用C 插槽连接QML信号
- C 提升信号和插槽连接
- Qt 我可以在构造函数中将信号/插槽连接到自身吗?
- worker是否可以在Qt中使用信号/插槽连接停止自己的线程?
- 将信号与不同类别的插槽连接
- 如何在线程和子线程之间设置信号/插槽连接
- 如何在编译期间检查信号/插槽连接?
- Qt如何使一个按钮响应时,插槽连接到它的click()信号正在运行
- 如何在不使用信号插槽连接的情况下触发操作
- Qt转发信号/插槽连接