2018.4.25
最近导师接了一个新项目,需要用到Qt,最近一段时间需要从零学起一个新平台的使用和安装了。
软件安装及环境配置主要参考 Qt5.9.2+VS2015安装配置教程
成功在办公室电脑(WIN10+VS2015+Qt5.10.1)与实验室电脑(WIN7+VS2017+Qt5.10.1)上安装配置成功(貌似匹配有点奇葩,这是历史遗留问题了)。
上大概翻了一些教程,对比一下发现Qt学习之路2的学习推进方式更适合我一些,为了防止自己遗忘,在这里分享一些学习的要点,我记的知识要点可能偏个人一些,大概率思维会比较跳跃,建议参考博主原文和查看官方API理解。
Qt经典信 槽使用方式
最重要的连接函数connect(sender, signal, receiver, slot);。其中,第一个是发出信 的对象,第二个是发送对象发出的信 ,第三个是接收信 的对象,第四个是接收对象在接收到信 之后所需要调用的函数。sender 和 receiver 都是QObject指针,signal与slot在使用时最好使用成员函数指针(可以靠编译器帮忙查找函数错误)。当 sender 发出了 signal 信 之后,会自动调用 receiver 的 slot 函数。
QT信 槽实现方式探究
只有继承了QObject类的类,才具有使用信 槽的能力。凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT。不管是不是使用信 槽,都应该添加Q_OBJECT,且应该放在头文件中。这个宏将由moc做特殊处理展开,将为我们的类提供信 槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。
emit 是 Qt 对 C++ 的扩展,是一个关键字(其实也是一个宏),emit 的含义是发出信 。
自定义信 槽需要注意的事项:
1. 发送者和接收者都需要是QObject的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外);
2. 使用 signals 标记信 函数,信 是一个函数声明,返回 void,不需要实现函数代码;
3. 槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;
4. 使用 emit 在恰当的位置发送信 ;
5. 使用QObject::connect()函数连接信 和槽;
6. 相互绑定时防止发生无限循环。
Qt5信 槽新语法
1.有重载信 的情况:
若信 有重载,编译器会 出一个错误:由于这个函数(注意,信 实际也是一个普通的函数)有重载,因此不能用一个取址操作符获取其地址。如:
需要用函数指针显式指定某一个信 :
2.若槽函数带默认参数:
Qt 允许信 和槽的参数数目不一致:一方面,槽函数的参数数目可以比信 的参数少,信 多给的参数槽函数可以不使用,这是允许的;另一方面,槽函数的参数可以比信 的多,那就是槽函数的参数带有默认值。
但是需要注意的是,若使用函数指针显式指定槽函数,会 错。因为我们不能在函数指针中使用函数参数的默认值。这是 C++ 语言的限制:参数默认值只能使用在直接地函数调用中。当使用函数指针取其地址的时候,默认参数是不可见的!
解决方法有:1.用Qt4的连接语法,2.用Qt5+lambda表达式。
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!