欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Qt信号和槽

Qt信号和槽

2025/3/18 14:55:46 来源:https://blog.csdn.net/qhy850716/article/details/145995966  浏览:    关键词: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 的方法一样,不赘述。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词