我的开发平台是 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做动作的地方
想知道该怎么做比较好
感谢阅读