【第二章】自定义信号和槽函数

简介: 【第二章】自定义信号和槽函数

自定义信号

除了使用Qt框架提供的信号外,我们还可以自己定义信号以及槽函数。自定义信号和槽函数使得程序设计更加灵活。与槽函数一样,使用信号跟使用普通函数类似,只不过需要使用关键字signals声明且函数的返回值类型必须是void。如下:

signals:
    void mySignal(int value);

值得注意的是,在类中自定义一个信号时==,实际上只是声明了一个函数原型==。信号本身并不需要“我们”自己来具体实现,而是由Qt依据元对象编程技术自动生成。所以我们只需要告诉Qt这个函数是一个信号就可以了。

发射信号

信号通过emit关键字来发射,实际上emit只是一个宏,并没有实际操作,仅仅用于标识

emit mySignal(42);

上述代码就发射了mySignal信号,并携带了一个整型参数。当信号被发射时,Qt的元对象系统会找到该信号连接的所有槽函数,并依次调用它们。

自定义槽

槽函数可以是任何的普通函数,只需要在声明的过程中使用slots关键字。事实上,新的Qt版本出来之后可以不使用slots关键字(为了便于区分,推荐使用)。此外,槽函数可以搭配访问限定符使用。

比如:

通过函数名自动连接槽

事实上,除了使用slots关键字定义槽函数,我们也能通过使用设计模式给控件添加槽函数,并自动生成槽函数的声明。操作如下:

  1. 打开设计者模式,选择一个控件,鼠标右键单机该控件,选择转入槽
  1. 选择一个事件绑定槽函数
  2. 自动生成槽函数的声明,定义则需要自己实现

值得注意的的是,通过这种方式生成的槽函数自动连接上了信号!该信号就是之前我们选择的事件。

案例

实验要求:自定义一个信号和槽并进行连接,该槽函数响应信号的行为为修改窗口标题。这个自定义信号的发送是通过点击一个按钮来触发的

  1. 自定义一个mysignal信号和槽myhandler

    2.连接mysignal信号和槽myhandler

  1. 用设计者模式生成一个按钮控件,并为这个按钮的点击事件连接一个槽函数。该槽函数的行为是发送信号mysignal

    4.构建窗口,点击按钮并观察结果

这个简单的案例将我们上述内容都结合在了一起。

相关文章
|
4月前
|
安全
【第二章】信号与槽——connect函数的用法
【第二章】信号与槽——connect函数的用法
|
2月前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
|
4月前
|
缓存 监控 Java
Hysterix的概念、作用、使用方法
Hysterix的概念、作用、使用方法
39 0
|
4月前
|
存储
FreeRTOS入门教程(事件组概念和函数使用)
FreeRTOS入门教程(事件组概念和函数使用)
88 0
|
4月前
|
设计模式 开发框架 安全
C++ Qt开发:如何使用信号与槽
在Qt中,信号与槽(Signal and Slot)是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制,它带来了许多优势,使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过`QObject::connect`函数完成。这样的机制使得对象能够以一种灵活而松散耦合的方式进行通信,使得组件之间的交互更加灵活和可维护。
57 0
|
10月前
《QT从基础到进阶·四》信号槽的多种连接方式
《QT从基础到进阶·四》信号槽的多种连接方式
137 0
qt信号和槽执行原理简单介绍
qt信号和槽执行原理简单介绍
118 0
WebApi入门第十一章(定时器作用及语法)
WebApi入门第十一章(定时器作用及语法)
265 0
WebApi入门第十一章(定时器作用及语法)
从零开始学Pyqt5之【信号与槽函数定义与使用方法:包含自定义信号与自定义槽函数】
从零开始学Pyqt5之【信号与槽函数定义与使用方法:包含自定义信号与自定义槽函数】