博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt5 中关于信号槽的改动
阅读量:5948 次
发布时间:2019-06-19

本文共 862 字,大约阅读时间需要 2 分钟。

hot3.png

Qt5释出对信号/槽的新方法。保证了在编译阶段即可对信号槽使用进行检查,避免了到运行阶段才发现问题的尴尬。现将旧/新的信号槽用法进行回顾总结。

Qt4中最常用的信号槽写法:

connect(obj1, SIGNAL(fun1(param1, param2,...)), obj2, SLOT(fun2(param1,...)));//编译后connect(obj1, "fun1(param1, param2,...)", obj2, "fun2(param1,...)");

在程序编译阶段,程序会将函数以字符串的形式进行链接,程序不会检查信号/槽函数是否存在,只有在运行期间才会验证是否正确。

Qt5中的新语法:

connect(obj1, &ClassA::fun1, obj2, &ClassB::fun2);

编译期间就会检查信号与槽是否存在,参数类型检查,Q_OBJECT是否存在。

相比较Qt4中的语法,有了大的改进,而且槽函数不在限定必须是slot,可以是普通的函数、类的普通成员函数、lambda函数等。但是在新的语法中又带来了新问题,如果函数重载,有可能会造成程序的困扰,不知道该具体链接哪个。在此,我们有两种方法解决。

注:以下两种方法用在信号函数,或槽函数都可。

一:在使用connect函数前,对要链接的信号/槽函数使用函数指针,防止混淆。

//类函数指针。void (ClassA::* p)(param1, param2, ....) = &ClassA::fun1;connect(obj1, p, obj2, &ClassB::fun2);

二:在connect函数中使用c++的static_cast,来进行动态转换。

connect(obj1, static_cast
(&ClassA::fun1),        obj2, &ClassB::fun2);

转载于:https://my.oschina.net/weiweiqiao/blog/224262

你可能感兴趣的文章
ConcurrentHashMap(Java8)源码分析
查看>>
Python文件处理之文件指针(四)
查看>>
Numpy用法详解
查看>>
DataGridView在vb.net中的操作技巧
查看>>
PMP考试冲刺进行中。。。
查看>>
大换血的代价
查看>>
Learn in FCC(3)
查看>>
RunLoop--
查看>>
chrome 2行换行省略号 ... text-ellipse
查看>>
有用网站
查看>>
注册asp.net 4.0 到iis
查看>>
非负矩阵分解(2):算法推导与实现
查看>>
[LeetCode] Maximal Rectangle
查看>>
linux系统上解决postgres远程连接不上的问题
查看>>
从Redux源码探索最佳实践
查看>>
python的可变数据类型和不可变类型
查看>>
linux网络子系统内核分析
查看>>
Codeforces Round #474-E(树形dp)
查看>>
面向对象、类与对象
查看>>
Array flat的实现
查看>>