[问题] 非兄弟物件之间要怎么沟通?

楼主: liu2007 (è–¯)   2022-07-12 16:45:37
我的开发平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
有个问题困扰我很久,不知道该怎么写才好
故来请教比较好的写法是什么
在开始问问题之前想要说明的是
下面我会用到阿公、父亲、儿子的说法其实不是很准确
只是单纯我自己用来说明什么class 包含 什么 class的用词
如果造成混淆请见谅。
例如 class Father里面有一个class Child 的 property
而 class GramPa 里面有一个 class Father 的 property
以下自行理解的解决方法是素人方法
太菜还请见谅
如果两个Child物件要沟通没有问题
把一方的signal和slot给connect()起来就好
这也是最基础的写法。
只要知道两个Child的pointer就好。
如果是祖孙沟通
对于 Father 来说
就必须要有 GramPa 和 Child的pointer才能进行connect
对 Father 来说,Child 是自己制造或是本来自己的 property所以没问题
GramPa 的话
1.除非本来就有写一个 getParent()来认亲,要不然
2.只能一开始在生成 Father的时候在建构子里面塞 GramPa 的pointer
3.或者是如果 GramPa 伟大到整个program只会有一个 GramPa 的话
也可以用 singleton来取得 GramPa 的pointer
但如果祖孙的距离不只一层呢?
如果是上述的方法1或方法2
会变成每一层都多一个parent pointer 的 field
每一层的建构子都要都要多塞一个parent的pointer,在new 的时候也要把this丢进去
然后每一层的slot都只干一件事情,就是emit signal给上层
这样一来写了一堆很重复很累赘的程式码只为了传递一个讯号
取名也很头痛,通常会取很相近的名字,
如果这之中有bug出现,还要定睛去看到底是哪一层传错,很累。
似乎只能用上述的方法3 singleton,也就变成必须要include GramPa.h
程式多多少少搞得臃肿,如果GramPa.h有改的话还拖累编译的速度
我不知道我问的是否清楚(因为我要上班了,有点慌乱在乱打文章)
我的程式有很多那种某个小功能按钮按下去之后要叫很外面的UI做动作的地方
想知道该怎么做比较好
感谢阅读
作者: shibin (喜饼)   2022-07-12 18:57:00
为何GrandPa需要和Child沟通,让他们跟某Global沟通如何?
作者: LPH66 (-6.2598534e+18f)   2022-07-12 18:59:00
你还有 UI 层, 那楼上的“某Global”可以理解为视窗讯息
作者: s4300026 (s4300026)   2022-07-12 20:31:00
可以用MVC吗? 祖父是V,孙子是M,父亲是C。 父亲里面有祖父和孙子,请老爸当传声筒。然后没有继承关系,可以不要用祖父,父亲,儿子吗?用event丢出来,叫要做事的人hook。
作者: wulouise (在线上!=在电脑前)   2022-07-12 21:57:00
里面???如果是composite就自己各自挂signal不是很正常吗如果是继承,通常用的人都是用Base/Abstract那层吧

Links booklink

Contact Us: admin [ a t ] ucptt.com