• 3929阅读
  • 3回复

[提问]Qt4中的编译提示signals是protected的,导致emit时报错 [复制链接]

上一主题 下一主题
离线梦话王子
 

只看楼主 倒序阅读 楼主  发表于: 2018-12-14
我在qt5中写好的程序,放入linux中的qt4进行编译,编译时提示我有一个信号是protected的,导致在emit的时编译会报错。发送信号的类和执行槽函数的类是两个不同的类。我查看了qt4的源码其中“#   define signals protected” 确实和qt5的不同“#     define signals public”。如果是这样的话是不是说qt4中的信号槽之类用作与类和其子类中啊?!还是说我的用法有问题
离线dbzhang800

只看该作者 1楼 发表于: 2018-12-14
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,不然将无法编译。
1条评分好评度+1
never_forget 好评度 +1 - 2018-12-17
离线梦话王子

只看该作者 2楼 发表于: 2018-12-21
回 dbzhang800 的帖子
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的话信号槽的灵活性就大大降低了。
离线zhao4565821

只看该作者 3楼 发表于: 2019-08-06
你好 我也遇到了这个问题  请问你是怎么解决的?
快速回复
限100 字节
 
上一个 下一个