地方门户网站app,企业网站设计哪个好,网站制作动态转静态怎么做,网络服务提供者知道网络用户利用其网络服务在学习信号和槽的时候#xff0c;我们知道信号一般对应的就是用户的行为#xff0c;槽指的是接受到信号后的响应#xff0c;在类内有许多的内置信号和槽函数#xff0c;能够去实现一些常见的行为#xff0c;但实际业务开发中#xff0c;尤其是接受到信号的响应会根据具体…在学习信号和槽的时候我们知道信号一般对应的就是用户的行为槽指的是接受到信号后的响应在类内有许多的内置信号和槽函数能够去实现一些常见的行为但实际业务开发中尤其是接受到信号的响应会根据具体的业务逻辑有所不同所以需要自定义信号和槽函数
1. 如何自定义槽函数
1基于代码的方式
所谓的槽函数其实在Qt5过后和普通的函数没有区别在Qt5之前在对槽函数的定义和声明时需要加上关键字“public/private/project solts”例如 slots是Qt自己扩展的关键字像这些扩展的关键字是不属于C语法的 *为什么Qt可以在C的语法上拓展关键字
因为Qt采用了元编程技术即基于代码生成代码qmake在创建Qt项目的时候就会调用专门的扫描器去扫描这些关键字基于这些关键字生成一系列相关的代码
2基于图形化的方式
基于图形化的方式 通过图形化的方式可以直接右键指定的控件然后转到槽函数这里包括了所有该控件内的信号包括其父类的选择好后会自动生成代码跳转到槽函数的定义如下 这种方式定义的槽函数是直接就关联好相关信号的而不是通过connect函数进行关联的这里是通过命名的方式这是Qt内部做的处理我们可以看到上面的例子命名风格是 on_控件变量名_关联信号名 之所以可以通过命名就关联是因为ui生成的文件QWidget类内存在connectSlotsByName这个函数具体的实现不做过多研究。 2. 如何自定义信号
Qt中一般很少用到自定义信号这是由于信号一般对应用户的操作而用户的操作是可以穷举出来的通常的操作在Qt内都存在定义好的但不排除有少数需要用到的时候。
所谓信号其实本质上也是函数但又比较特殊信号函数的特殊
1只需要写出函数声明并告诉Qt这是一个信号即可这个函数的定义是Qt在编写过程中自动生成的且不可干预信号是Qt中的特殊机制Qt生成的信号函数的实现要配合Qt框架做很多既定的操作所以这个过程通常不可干预而是又Qt自己生成声明信号函数的方法是用到Qt拓展的关键字signals
2作为信号函数这个返回值必须是void有无参数都可甚至可以重载
例 此外定义好信号后还需要定义什么时候发送信号发送信号的方式在Qt5之前是需要用到关键字emit的但现在可以不用但为了区分信号函数最好是需要带上emit的。
具体举个例子
我先用图形化的方式创建一个按钮并且编写这个按钮的槽函数槽函数内容就是发送我自定义的信号。 然后我再将我自定义的信号关联到一个我自己写一个自定义槽函数上函数功能为将界面的标题修改。 总结
本章学习了如何自定义信号和槽了解了Qt拓展的一些关键字以及使用方式这里做个简单总结
public slots : 自定义槽函数用的关键字
图形化定义槽函数
on_控件名称_信号名称 : 以命名的方式关联信号和槽函数
signals声明信号函数的关键字
emit : 表示信号发送的关键字