查看完整版本: [-- Qt4中的编译提示signals是protected的,导致emit时报错 --]

QTCN开发网 -> Qt基础编程 -> Qt4中的编译提示signals是protected的,导致emit时报错 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

梦话王子 2018-12-14 16:14

Qt4中的编译提示signals是protected的,导致emit时报错

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

dbzhang800 2018-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,不然将无法编译。

梦话王子 2018-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的话信号槽的灵活性就大大降低了。

zhao4565821 2019-08-06 18:20
你好 我也遇到了这个问题  请问你是怎么解决的?


查看完整版本: [-- Qt4中的编译提示signals是protected的,导致emit时报错 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled