查看完整版本: [-- Qt5信号槽用法有没有好的建议? --]

QTCN开发网 -> Qt基础编程 -> Qt5信号槽用法有没有好的建议? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

snow_man_0 2020-06-21 16:56

Qt5信号槽用法有没有好的建议?

Qt5信号槽新用法出来后,回调方式有:
1、信号槽宏,MOC实现,老办法
2、lambda方式
3、connect信号到对象的普通成员函数
4、调用的和被调用对象相互存放对方的指针

1需要调用MOC,有些不太喜欢这种方式
2匿名函数过多的话,又与信号槽宏混合使用,会破坏代码结构和可读性
3有机会代替MOC
4土办法

大家有没有好的使用建议,或规范?

fsu0413 2020-06-21 23:23
看项目需求吧
3是目前推荐的办法,在编译期就可以解决信号和槽参数类型等问题,不过现阶段还是需要moc
1是从Qt4一直传下来的方法,老代码可以接着用
2只建议在处理逻辑不多又需要使用闭包的情况下使用,其实可读性还是比较高的

moc该用还是得用,除非哪一天Qt决定抛弃moc

kaon 2020-06-23 14:30
2的可读性很高啊,
4就算了吧。。

snow_man_0 2020-06-23 17:15
kaon:2的可读性很高啊,
4就算了吧。。 (2020-06-23 14:30)

我是说lambda表达式和信号槽宏混合使用,会影响可读性

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

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

信号槽宏的优点有 信号可以转发,可以多个接收,信号源作用,这种模式很先进,但要借助MOC实现。Qt还会不会有下一代信号传递方式实现,比如借鉴boost?

snow_man_0 2020-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指针


查看完整版本: [-- Qt5信号槽用法有没有好的建议? --] [-- top --]



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