当前位置: 首页 > news >正文

Qt信号和槽

一、介绍

1、介绍信号和槽

在之前的按钮使用中我们初步认识了信号和槽。简单来说就是:

信号源:哪个控件发出的信号。

信号类型:用户对控件的不同操作发出不同的信号。

信号处理方式:槽(对应的回调函数)

2、介绍关联函数 connect

connect 函数:Q_OBJECT 宏自带的静态函数,用于关联信号和槽。

下图是 connect 定义:

const QObject* sender :信号源

const char* signal :信号源发出的信号类型

QObjecct* recever :处理信号者

const char* method :处理信号方式

下图是一个简单的 connect 函数使用:

但是我们提到槽其实是一个函数,上面的 connect 函数参数是 const char* ,这是怎么回事呢?

其实在早期传入信号和槽是需要调用宏来实现的,宏的作用就是把函数指针转成字符串,新版的 connect 函数重载了一个新的:

定义了模板传入的就是任意类型的函数指针。

二、自定义槽函数

上面简单使用 connect 是用的控件默认的信号和槽,下面介绍如何自定义槽函数。

槽函数就是处理信号的回调函数,有两种定义方式。

1、定义成成员函数

widget.h:

widget.cpp:

结果:

2、ui 界面点击定义

上面是堆定义按钮实现按钮按下的槽函数,这里实现拖拽按钮定义槽函数。

ui 界面:

右击控件,选择转到槽:

双击信号 clicked(bool),自动转到定义函数文件 widget.cpp:

结果:

三、自定义信号

1、介绍信号

信号也是一类特殊的函数。

程序员只写出信号的声明并告诉 Qt 这是一个信号函数。函数的定义由 Qt 自动生成,程序员无法干预。

信号函数返回值一定是 void,参数随意,可以重载。

2、自定义信号

widget.h:

signals:就代表我要定义信号函数了。

对应还要实现槽函数 handlerMySignal()

widget.cpp:

实现完槽函数之后,关联槽和信号,

不同于内置信号,用户对控件做出特定行为自动发射信号,自定义信号用 emit 信号 的方式指定位置发射信号调用槽函数。

结果:

四、带参数的信号和槽

信号的参数会作为实参传到槽函数的参数进行逻辑处理。

所以信号和槽对应参数类型一定要一致,但是信号的参数大于等于槽函数的参数,这么做的目的是多个信号对应一个槽函数。

槽函数按顺序拿前 n 个参数。

widget.h:

widget.cpp:

结果:

五、断开连接 disconnect

使用方法和 connect 基本一样,当一个信号要换一个槽函数的时候就需要先断开连接再连接。

widget.h:

widget.cpp:

逻辑就是一个按钮可以改变窗口名字,一个按钮可以改变那个按钮原本的窗口名字。

结果:

先点击修改窗口标题

再点击切换按钮功能后点击修改窗口标题:

六、槽函数 lambda 表达式

和 C++11 的方法一样,不赘述。


http://www.mrgr.cn/news/93053.html

相关文章:

  • 自然语言处理基础
  • MySQL中的行级锁
  • LINUX网络基础 - 网络编程套接字,UDP与TCP
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.2线程池配置与写入限流
  • vocal~怎么没人告诉我?大数据技术组件(更新中......)
  • Vue 3 中 unref 的作用与 Vue Router currentRoute 的知识
  • 物理竞赛中的线性代数
  • 服务器时间同步
  • PAT乙级真题 / 知识点(1)
  • Metal学习笔记七:片元函数
  • C++学习之C++初识、C++对C语言增强、对C语言扩展
  • 静态时序分析:SDC约束命令set_clock_jitter详解
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化
  • vue videojs使用canvas截取视频画面
  • 基于 DataEase 的企业数据分析实践
  • 硅基流动nodejs流式输出
  • 使用vite创建vue3项目
  • T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取
  • AMD RDNA3 GPU架构解析
  • (十 九)趣学设计模式 之 中介者模式!