九江网站建设张旭,推广竞价,珠海网站外包,加盟高端网站建设文章目录 qt信号与槽--02自定义槽函数第一种方式第二种方式 自定义信号不带参数带参数 总结结语 很高兴和大家见面#xff0c;给生活加点impetus#xff01;#xff01;开启今天的编程之路#xff01;#xff01; 今天我们进一步c11中常见的新增表达 作者#xff1a;٩(… 文章目录 qt信号与槽--02自定义槽函数第一种方式第二种方式 自定义信号不带参数带参数 总结结语 很高兴和大家见面给生活加点impetus开启今天的编程之路 今天我们进一步c11中常见的新增表达 作者٩( ‘ω’ )و260 我的专栏qtLinuxC进阶C初阶数据结构初阶题海探骊c语言 欢迎点赞关注 qt信号与槽–02
自定义槽函数
第一种方式
首先自定义槽函数就跟我们之前定义的普通成员函数没有什么问题而且之前我们已经实现过类似的方法了。 但是在qt4之前的版本中信号处理函数必须放置在public/private/protected slots这个状态下 形如 slots是qt中新增的关键字在qt中关键字的作用是因为qt使用的是元编程技术代码通过qmake生成代码之后编译器调用的是这个qmake生成的代码qmake构建qt项目的时候会调用对应的扫描器来扫描项目中的关键字。 但是随着到达qt5以及更高的编译器上槽函数已经允许直接被public/private/protected这三个类型限定符修饰了即slots去掉也无妨。
第二种方式
第二种方式还是基于图形化创建空间的方式我们来看操作 随后我们右键这个控件点击转到槽 我们能够看见PushButton这个类本身没有内置的信号使用的都是继承父类的信号~~
随后我们双击clicked来看界面 我们在其中书写上信号处理的操作并来构建这个qt项目 此时信号与槽的连接仍然建立好了请问之前我创建了connect函数来连接信号与槽吗既然我没有建立信号与槽的连接那么为什么槽函数被执行了呢 我们来观察这个槽函数的命名规则就能够获取一些答案
pushButton这个是我们创建控件对象的对象名而clicked是这个控件对象发出的信号类型难道真的有这么巧吗 实际上信号的连接方式除了使用connect函数还能够使用函数名字的方式来建立连接并且这个名字的命名一定是发射信号对象和发射信号类型 如果我们将名字稍微修改一点点此时我将函数名的ed给去掉了就会发现信号与槽函数无法建立连接即信号已经发出但是面板不为所动 而且下方出现了这个提示 其实这里通过函数的名字方式来建立连接底层是调用了connectSlotsByName这个函数即调用这个函数就会触发上述通过函数名自动连接信号槽的规则
如果此时我们将名字修改回来再来看结果 总结如果我们使用图形化方式创建控件界面控件固定不灵活还是推荐这种更加快速的方式此时不用再来connect了反之纯代码手写需要调用connect建立连接 自定义信号
信号的本质是什么可以理解为信号就是用户执行了一个操作
不带参数
qt中也允许自定义信号但是这种方式不常用因为用户能够在面板上能够执行的操作就那么几种所以信号就那么几种。在qt内置的类中大致已经包含完全了。只有极少数情况下会自己重新设置信号~~
虽然我们Widget内部还没有定义信号但是在继承的QWidget和QObject中实现了许多内置的信号。
但是如果自定义信号和我们函数差别较大。 自定义信号特点 1我们只用写出声明定义的话qmake会自己帮我们实现 2返回值必须是void不返回任何东西 3必须有signals修饰 4有没有参数都可以甚至可以支持函数重载 同理signal也是qt中新增的关键字qmake调用扫描器就能够识别接下来我写的函数是一个信号。以便于qmake为信号内部生成对应的定义。
我们来看一个测试用例 我们来看结果 我们发现此时我们的windowTitle并没有有发生改变这是什么原因呢 虽然我们建立了槽函数与信号的连接但是此时我们的信号并没有发射信号没有发射当然也就不会执行对应的槽函数。
qt中还有一个关键字可以来表示信号的发射关键字为emit。 但是在qt内置的信号中都不需要我们手动实现用户在gui面板中执行某些操作信号就能够发出即qt信号中发射信号的部分已经内置到我们的qt框架中了 这样信号就发射成功并执行了对应的槽函数。 而且发射信号的代码只要是写到合适的位置都是可以的不一定需要写到Widget的构造函数中。
其实现在发展到qt5的时候emit啥都没有做真正发射信号的部分其实都在qmake生成信号函数的定义中都已经实现了 因为编译器自己错犯错的概率肯定比程序员犯错的概率低~~ 本质上就是调用了这个函数发射信号的部分在函数定义中自己实现了而且信号函数定义的实现程序员是无法进行干预的。
带参数
信号和槽也可以带参数此时的作用为 通过对于发射信号的参数传递这个参数最终会传递到槽函数中。 所以此时槽函数和信号的参数类型必须一致至于个数槽函数的参数个数必须少于信号函数。即信号参数参数更多
来看代码 来看结果
总结
今天我们学习了qt如何通过图形化的方式来快速创建控件更快速的连接信号与槽底层是怎么样的一定要调用那个函数才能够触发对应的机制函数名的命名规则槽函数qt4之前的注意slots关键字。 重要的就是连接槽函数的方式connect链接特殊函数名链接~~
学习了信号的定义规则三点以及定义信号之后需要发射信号qt中新增的emit关键字~~
学习了带参数的信号槽信号函数和槽函数参数的书写规则~~
结语
今天的内容就到这里不足之处欢迎留言指出感谢大家支持 天行健君子以自强不息地势坤君子以厚德载物加油