c++ - 用于对象间通信的 Qt 信号和插槽的替代方案
问题描述
使用类似 Qt 的信号和槽在两个对象(类实例)之间进行双向通信的替代方法是什么?
我知道这可以通过在每个对象中保存另一个引用来实现。然而,当有许多不同的对象并且所有对象都应该相互交互(并因此知道)时,这会让人感到困惑。
我遇到的另一个问题是 Qt 信号和插槽如何在内部实现这种对象间通信(简单概述事件的内部过程会有所帮助)?
我正在谈论的 Qt 示例如下。两个对象 c 和 d 都可以发出连接到另一个插槽的信号。
class Chicken : public QObject
{
Q_OBJECT
public:
Chicken() = default;
public slots:
void helloBackDuck() {
std::cout << "Hello Back Duck" << std::endl;
}
signals:
void helloDuck();
};
class Duck : public QObject
{
Q_OBJECT
public:
Duck() = default;
public slots:
void helloBackChicken() {
std::cout << "Hello Back Chicken" << std::endl;
}
signals:
void helloChicken();
};
int main() {
Chicken c;
Duck d;
connect(&c, &Chicken::helloDuck, &d, &Duck::helloBackChicken);
connect(&d, &Duck::helloChicken, &c, &Chicken::helloBackDuck);
}
解决方案
推荐阅读
- sql - 在 clob 列中搜索 oracle 数据库中是否存在两个字符串?
- reactjs - fetch 在 JSON 中给出响应 Unexpected token <
- mysql - 无法连接到 docker 上的 mysql
- uiimageview - UIImageView Tint 颜色怪异
- google-bigquery - 在大查询中从谷歌分析导出中选择命中级别自定义指标的值
- r - 融化输出意外,所有0值
- amazon-web-services - 为什么 VPC 中公有子网内的 AWS lambda 函数无法连接到 Internet?
- spring-boot - Corda Springboot Webserver 可执行 Jar 创建
- .net - 如何将 FormData 对象中的文件从 AngularJS 发布到 ASP.NET
- opengl - 是否有增加 GL_MAX_ARRAY_TEXTURE_LAYERS 的解决方法?