首页| 论坛| 消息

标题:Qt5信号槽用法有没有好的建议?
作者:snow_man_0
日期:2020-06-21 16:56
内容:

Qt5信号槽新用法出来后,回调方式有:
1、信号槽宏,MOC实现,老办法
2、lambda方式
3、connect信号到对象的普通成员函数
4、调用的和被调用对象相互存放对方的指针
1需要调用MOC,有些不太喜欢这种方式
2匿名函数过多的话,又与信号槽宏混合使用,会破坏代码结构和可读性
3有机会代替MOC
4土办法
大家有没有好的使用建议,或规范?


#1 [fsu0413 06-21 23:23]
看项目需求吧
3是目前推荐的办法,在编译期就可以解决信号和槽参数类型等问题,不过现阶段还是需要moc
1是从Qt4一直传下来的方法,老代码可以接着用
2只建议在处理逻辑不多又需要使用闭包的情况下使用,其实可读性还是比较高的
moc该用还是得用,除非哪一天Qt决定抛弃moc
#2 [kaon 06-23 14:30]
2的可读性很高啊,
4就算了吧。。
#3 回 kaon 的帖子 [snow_man_0 06-23 17:15]
kaon:2的可读性很高啊,
4就算了吧。。 (2020-06-23 14:30)
我是说lambda表达式和信号槽宏混合使用,会影响可读性

如果处理逻辑不多,比如3个以内,用lambda表达式是很方便

不知道有没有公司强制这样规定?
比如超过3个以上的处理逻辑时,禁止使用lambda,统一使用connect到对象普通成员函数
比如尽量connect到对象普通成员函数,避免使用信号槽宏

信号槽宏的优点有 信号可以转发,可以多个接收,信号源作用,这种模式很先进,但要借助MOC实现。Qt还会不会有下一代信号传递方式实现,比如借鉴boost?
#4 回 kaon 的帖子 [snow_man_0 06-23 17:32]
kaon:2的可读性很高啊,
4就算了吧。。 (2020-06-23 14:30) 
调用的和被调用对象相互存放对方的指针,比如
class Parent
{
Parent()
{
child=new Child(this);
}
Child* child;
}
这样child可以方便访问Parent,避免child的信号通过槽发给Parent
Qt的impl对象几乎都存放了Parent指针

回复 发表
主题 版块