gpt4 book ai didi

c++ - 尝试在 Qt 中连接隐藏信号的两种方式之间做出决定

转载 作者:行者123 更新时间:2023-11-30 02:41:19 25 4
gpt4 key购买 nike

假设我们有三个类,ABCB 持有 A 的私有(private)实例,而 C 持有 B 的实例(即 C -> B -> A)。 C 需要从 A 接收一个 update() 信号,但是由于 A 是私有(private)的,我们可以:


B 中使用访问器方法以允许访问 Aupdate() 信号。例如,

C 中:

 connect(B.getA(), SIGNAL(update()), this, SLOT(doUpdate()));

或者,我们可以将 B 中的 Aupdate() 信号转发给 C。例如,

B 中:

connect(A, SIGNAL(update()), this, SIGNAL(update()));

C 中:

connect(B, SIGNAL(update()), this, SLOT(doUpdate())); 

或者,我完全缺少的一些其他选项;不确定。

基本上,这两个选项之间有什么区别?这两种方式都不会破坏封装,但是转发信号是否会引入延迟?文件说第二个信号是在收到第一个信号后立即发送的,所以看起来差别不大,但我很好奇是否有“正确”的方法来做到这一点。


哦,我意识到标题中的“隐藏”并不准确,但我想不出更好的措辞方式又不会太罗嗦。

最佳答案

在同一个线程中发出的信号只是一个调用(除非您明确要求使用队列),因此从性能的角度来看,成本可以忽略不计,除非您正在创建大量(数百万)个信号每秒(在这种情况下,无论如何使用信号可能不是一个好主意)。如果与 GUI 相关的机器需要这样做,那么成本很可能无关紧要,因为在 GUI 中绘制单个字符的成本要高得多。

关于封装,如果不了解更多关于 ABC 的知识,就很难说清楚... C 想要通知 B 的隐藏内脏中发生的事情听起来很奇怪......可能是 B 应该派生自 A 或者至少从逻辑角度重新发布该信号?

关于c++ - 尝试在 Qt 中连接隐藏信号的两种方式之间做出决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231031/

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