标题:Qt4中的编译提示signals是protected的,导致emit时报错
作者:梦话王子
日期:2018-12-14 16:14
内容:
我在qt5中写好的程序,放入linux中的qt4进行编译,编译时提示我有一个信号是protected的,导致在emit的时编译会报错。发送信号的类和执行槽函数的类是两个不同的类。我查看了qt4的源码其中“# define signals protected” 确实和qt5的不同“# define signals public”。如果是这样的话是不是说qt4中的信号槽之类用作与类和其子类中啊?!还是说我的用法有问题?
#1 [dbzhang800 12-14 20:44]
Qt4的表现是正常的,Qt5应该要编译报错的,但是很不幸,官方做了各种尝试,想让Qt5报错(也就是要禁止楼主在Qt5这么使用信号),但是都失败了。
In Qt 5 we had to change signals from protected to public. This is unfortunate since this mean anyone can emit the signals. We found no way around it
------------------
Qt4以及之前版本,signal都是protected的,这是一个正常的设计。Qt5信号和槽引入的新的语法,由于connect的时候,需要获取信号的地址,signal被迫改成了public,不然将无法编译。
#2 回 dbzhang800 的帖子 [梦话王子 12-21 13:17]
dbzhang800:Qt4的表现是正常的,Qt5应该要编译报错的,但是很不幸,官方做了各种尝试,想让Qt5报错(也就是要禁止楼主在Qt5这么使用信号),但是都失败了。
In Qt 5 we had to change signals from protected to public. This is unfortunate since this mean anyone can emit the signals... (2018-12-14 20:44)
谢谢版主的专业解答。我也找到了绕过这个问题的方法。由于我刚开始学习Qt时使用的就是Qt5,没想到信号槽在Qt4中还有这样的限制。只是感觉如果信号是protected的话信号槽的灵活性就大大降低了。
#3 [zhao4565821 08-06 18:20]
你好 我也遇到了这个问题请问你是怎么解决的?