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

信号和槽的问题

7
回复
8225
查看
[复制链接]
累计签到:6 天
连续签到:1 天
来源: 2017-5-28 23:31:34 显示全部楼层 |阅读模式
1Qter豆
小弟最近遇到一个问题,我自定义的一个信号和槽函数用Qt5套件编译的时候没有错误,但是改用Qt4编译时提示这个信号是protected的,一直报错,这个信号槽函数带有一个int和一个Qstring类型的参数,不知道到底时什么原因,现在电脑不在身边,没有源程序附上。。。抱歉。。。;有哪位前辈知道这是为什么?

最佳答案

查看完整内容

好像是这样的: Qt官方是不建议在一个类外部 emit 本类的信号的. 在 Qt4 中, 将 signals 做了手脚, 信号访问属性是 protected 的. 但在 Qt5 中, 因为增加了 connect 的新语法 (使用的为函数指针), Qt4 中的那套就行不通了, 所以 Qt 就取消了信号的 protected, 改为了 public. 建议将信号使用一个函数封装, 在类外部只调用函数. ...
回复

使用道具 举报

尚未签到

2017-5-28 23:31:35 显示全部楼层
好像是这样的:
Qt官方是不建议在一个类外部 emit 本类的信号的. 在 Qt4 中, 将 signals 做了手脚, 信号访问属性是 protected 的. 但在 Qt5 中, 因为增加了 connect 的新语法 (使用的为函数指针), Qt4 中的那套就行不通了, 所以 Qt 就取消了信号的 protected, 改为了 public.
建议将信号使用一个函数封装, 在类外部只调用函数.

回复

使用道具 举报

尚未签到

2017-5-29 17:47:38 显示全部楼层
改成public试试看?
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-5-31 10:50:53 显示全部楼层
Joey_Chan 发表于 2017-5-29 17:47
改成public试试看?

Qt里的信号声明只需要加signals就可以了,不用再加限定。关键是我在Qt5里运行一点问题都没有,到了Qt4就说这个信号是受保护的。。。
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-5-31 13:11:13 显示全部楼层
顶一顶,我发现我问题表述的不清楚,重新表述一下,我在类A中定义了一个信号,在类B里,包含类A的头文件并且实例化类A,但是我在类B里用A的对象调用A中的信号时出现问题:说此信号 is protected,不能在类A里调用,我看过signals宏的定义,signals宏在Qt里是protected的,如果出现这个问题我也能理解,但是为什么之前用Qt5编译的时候是可以的,换成Qt4就不行了?
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-5-31 13:13:00 显示全部楼层
实际上,我也知道怎么调整了,只要把类A里的信号放在类B里定义就不会有这个protected问题,但是为什么会出现这样的问题我就不懂了。。。
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-6-1 15:50:18 显示全部楼层
Qt4的信号和槽实现机制有点坑。。所有很容易出错
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-6-2 10:50:31 显示全部楼层
zhaoyongCNSX 发表于 2017-6-1 18:14
好像是这样的:
Qt官方是不建议在一个类外部 emit 本类的信号的. 在 Qt4 中, 将 signals 做了手脚, 信号访问 ...

原来是这样的。。。感谢点拨
回复

使用道具 举报

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

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