• 5307阅读
  • 5回复

[提问]子窗口的子窗口发送信号,能够直接被父窗口接收吗? [复制链接]

上一主题 下一主题
离线yangshen1990
 

只看楼主 倒序阅读 楼主  发表于: 2015-06-27
假设创建窗口adlg,以adlg为parent创建bdlg,再以bdlg为parent创建cdlg,bdlg是adlg的成员变量,cdlg是bdlg的成员变量。
如果cdlg向adlg发送信号msg(),是需要先将信号发送给bdlg,再由bdlg转发给adlg吗?
还是说在adlg可以直接这么写:connect(bdlg->cdlg, SIGNAL(msg()),..........),不需要经过bdlg转发
哪一种方法比较正规,请指教。。

只看该作者 1楼 发表于: 2015-06-27
你在子类中发送信号,然后在父类中,让该子类接收信号,然后父类采取相应的操作就OK了
离线yangshen1990

只看该作者 2楼 发表于: 2015-06-27
回 小明在陕西 的帖子
小明在陕西:你在子类中发送信号,然后在父类中,让该子类接收信号,然后父类采取相应的操作就OK了 (2015-06-27 19:54)

这个。。你说的是流程吗,我的意思其实就是“孙类”的信号,“父类”能不能直接接收,还是要经过“子类”转发给“父类”
离线leonchiong

只看该作者 3楼 发表于: 2016-06-22
可以像你开帖写的那样直接写connect(bdlg->cdlg, SIGNAL(msg()),..........)
也可以在b中定义一个信号connect(cdlg, SIGNAL(msg()),bdlg,SIGNAL(msg())) 这样去转发
个人感觉第二种方法会常用一点, 并且代码行文要规范易懂一点

离线z_墨脱

只看该作者 4楼 发表于: 2016-06-22
直接connect(adlg->bdlg->cdlg,SIGNAL(msg()),this,SLOT(slot()));不就行了吗啊
离线pamire

只看该作者 5楼 发表于: 2016-06-22
4楼的不科学,感觉有点破坏类的独立性,其实首尾adlg, cdlg不需要知道bdlg的,也不需要它的实例指针的,但这种写法是需要包含的。

类似这种a->b->c->d->e,e的变化要通知a。这种要保持类的独立性,跳过中间不相关的环节,感觉最好用消息机制比较好。
e发消息,a接收,跳过中间的b, c, d,不需要包括b,c,d的文件头,也不需要知道它们的实例对象.
快速回复
限100 字节
 
上一个 下一个