找回密码
 立即注册
收起左侧

Qt的slots宏定义对于编译的影响

0
回复
5537
查看
[复制链接]
累计签到:2 天
连续签到:2 天
来源: 2020-12-13 22:24:49 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 猫哥的Qt之路 于 2020-12-13 22:30 编辑

环境:VS2019 + Qt5.15.0
问题描述:有B, C两个对话框类,共同继承自A类。
B,C两个类都定义了两个相同的槽函数


在B的槽函数上打上断点。


结果断点直接就跳到对应的C的那个槽函数内,运行时也是这样,本来点击B类的按钮结果跳到C类的槽函数里面
检查代码发现B,C两个类并无任何交集(除了都继承自A类)。

经过如下试验就能恢复正常:
1.对其中一个类槽函数里面加一行int a = 0,(总之让两个函数不一样则正常了)。
2. 将上图中C类的 “slots:”关键字去掉。

感觉像是B,C两个类的这两个槽函数在编译时只编译了一份。不太清楚"slots:"关键字加上对于整个编译流程的影响。
也不太理解信号槽的编译和注册的底层实现,或者编译器遇到重复的槽函数的处理。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了