Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你

简介: 以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。

目录

· 学习之前的问题

在日常我们写项目时信号与槽是我们非常常用的一个工具,那它究竟是什么呢?有什么作用?参数是什么?

1. 信号与槽

1.1 定义

1.2 规则

信号与槽的关联关系

信号槽的参数对应关系

1.3 实例


· 学习之前的问题

在日常我们写项目时信号与槽是我们非常常用的一个工具,那它究竟是什么呢?有什么作用?参数是什么?

1. 信号与槽

1.1 定义

以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。

如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。

它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。

1.2 规则

信号与槽的关联关系

QObject::connect( sender, SIGNAL(signal),receiver, SLOT(method) );

 

信号与信号相连

QObject::connect( sender, SIGNAL(signal), receiver, SIGNAL(signal) );

 

同一个信号连接到多个槽

QObject::connect( sender, SIGNAL(signal),receiver, SLOT(method1) );

QObject::connect( sender, SIGNAL(signal),receiver, SLOT(method2) );

......

 

多个信号连接到同一个槽

QObject::connect( sender, SIGNAL(signal1),receiver, SLOT(method) );

QObject::connect( sender, SIGNAL(signal2),receiver, SLOT(method) );

......

信号槽的参数对应关系

image.gif 编辑

信号的参数个数必须>=槽的参数个数

个数匹配的参数的类型也必须匹配

可以传递任意个参数,如果参数过多,那么应该考虑使用结构体或者类(对象)来传递

1.3 实例

参数:

QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

image.gif

他是继承与QObject的一个函数,共有五个参数,他们的作用从前往后依次是发送者,信号,接收者,槽,线程。

前四个参数我们不难去理解,第五个参数涉及到线程,不过一般我们不会去写第五个参数,往往是用它默认的,如果想要去了解的小伙伴可以去这个链接了解一下。

Qt connect 第五个参数_qt connect函数第五个参数-CSDN博客

转载于 土拨鼠不是老鼠 大佬。

这个信号与槽也分为两种,一个我们可以直接在UI界面右击按钮或者其他组件,有一个转到槽的选项,点击后可以选择信号的类型,我们选了之后就是直接替我们写好一个信号和槽,这种方法无需自己去使用connect函数,因为Qt的信号与槽是有标准的命名规则的,组成为on_对象名_信号。

下面是一个非常简单的实例,运用了一个按钮自带的点击槽

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

下面是自定义信号的实例:

image.gif 编辑

image.gif 编辑

上面就是两个基本的案例,当然信号与槽的作用不止这么多,在我们书写多个文件时,我们可以做到一个信号多个cpp调用,当然我们要修改的就是发送方和接受方。在用这种方法时我推荐时在一个主GUI程里去操作其他这些信号和槽,例如文件1发送了一个信号,我们需要让这个信号呗文件3接收到并且在文件3中执行对应的槽,我们可以在主文件中将这个文件1的信号和文件3中的槽链接起来,作为一个中间人的作用。这个中间人一般是我们的主界面。

image.gif 编辑

希望可以帮助大家在学习的道路上更进一步,以上也只是本人的一些拙见,后续有了新的感悟会继续修改。

相关文章
|
5天前
|
定位技术 Go 开发工具
dynamic-situational-awareness-qt学习记录
本文是作者yantuguiguziPGJ关于dynamic-situational-awareness-qt学习记录的分享,介绍了在Qt学习过程中发现的qml资源丰富的代码仓库,并提供了资源路径和相关的安装、配置步骤,涉及的内容有数字地球、GIS纹理等,同时提供了相关链接和git命令来克隆代码仓库和ArcGIS Runtime SDK for Qt的安装说明。
|
4月前
|
安全 C++ Windows
Qt信号与槽机制
Qt信号与槽机制
45 1
|
2月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)
|
2月前
|
Linux C++
【Qt】信号与槽(上)
【Qt】信号与槽(上)
【Qt】信号与槽(上)
|
2月前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
43 4
|
2月前
【qt】有点意思的信号与槽
【qt】有点意思的信号与槽
15 0
|
2月前
【qt】QTcpSocket相关的信号
【qt】QTcpSocket相关的信号
10 0
|
2月前
【qt】自定义对话框(2)
【qt】自定义对话框(2)
17 0
|
2月前
【qt】自定义对话框(1)
【qt】自定义对话框(1)
13 0
|
4月前
|
C++
Qt信号和槽
Qt信号和槽
下一篇
无影云桌面