查看完整版本: [--
Qt的slots宏定义对于编译的影响
--]
QTCN开发网
->
Qt基础编程
->
Qt的slots宏定义对于编译的影响
[打印本页]
登录
->
注册
->
回复主题
->
发表主题
雪狼王
2020-12-13 21:40
Qt的slots宏定义对于编译的影响
环境:VS2019 + Qt5.15.0
问题描述:有B, C两个对话框类,共同继承自A类。
B,C两个类都定义了两个相同的槽函数,(done()函数的宏定义值也是一样的)
[attachment=22152]
在B的槽函数上打上断点。
[attachment=22153]
结果断点直接就跳到对应的C的那个槽函数内,运行时也是这样,本来点击B类的按钮结果跳到C类的槽函数里面
检查代码发现B,C两个类并无任何交集(除了都继承自A类)。
经过如下试验就能恢复正常:
1.对其中一个类槽函数里面加一行int a = 0,(总之让两个函数不一样则正常了)。
2. 将上图中C类的 “slots:”关键字去掉。
感觉像是B,C两个类的这两个槽函数在编译时只编译了一份。不太清楚"slots:"关键字加上对于整个编译流程的影响。
也不太理解信号槽的编译和注册的底层实现,或者编译器遇到重复的槽函数的处理。
fsu0413
2020-12-23 07:19
我觉得是编译器bug
slots是宏,展开啥也没有,就是为了moc识别的
snow_man_0
2020-12-23 20:40
按信号槽的新语法,建议不使用slots
笑颜
2020-12-24 09:23
如此莫名其妙的问题,检查是否在类声明的时候加上了 Q_OBJECT 宏!
fsu0413
2020-12-24 12:28
笑颜
:
如此莫名其妙的问题,检查是否在类声明的时候加上了 Q_OBJECT 宏!
(2020-12-24 09:23)
没有宏的话会编译失败吧
雪狼王
2021-01-11 09:52
在Debug模式编译下确实不会出现这种情况,应该还是跟Release的优化有关。
查看完整版本: [--
Qt的slots宏定义对于编译的影响
--] [--
top
--]
Powered by
phpwind
v8.7
Code ©2003-2011
phpwind
Gzip disabled