【QT入门】 Qt槽函数五种常用写法介绍

声明:该专栏为本人学习Qt知识点时候的笔记汇总,希望能给初学的朋友们一点帮助(加油!)


往期回顾:

【QT入门】实现一个简单的图片查看软件-CSDN博客

【QT入门】图片查看软件(优化)-CSDN博客

【QT入门】 lambda表达式(函数)详解-CSDN博客

 【QT入门】 Qt槽函数五种常用写法介绍

一、信号槽基本概念

Qt的信号槽是一种用于处理事件和通信的机制,是Qt框架中的一个重要特性。信号槽机制使得对象之间可以进行异步通信,无需显式调用对方的方法,从而实现了对象之间的解耦和灵活的交互。

1、信号(Signal):

信号是一种特殊的成员函数,用于通知其他对象发生了某个事件或状态的改变。信号在类中声明为signals关键字,并不包含实际的实现代码。信号可以带有参数,用于传递额外的信息给槽函数。

2、槽(Slot):

槽是用于响应信号的成员函数,可以执行相应的操作或处理逻辑。槽在类中声明为slots关键字,并实现具体的逻辑,槽函数的参数列表必须与信号的参数列表一致,或者可以接受更多参数。 

通过connect函数将信号与槽连接起来,使得当信号被发射时,相关的槽函数会被调用。
连接可以是一对多的关系,即一个信号可以连接多个槽函数,也可以是多对一的关系,即多个信号可以连接到同一个槽函数。我们来看看其四个参数

connect(1.信号的发送者、2.发送的信号(函数的地址)、3.信号的接收者、4.接收后信号的处理(槽函数)的地址)

3、示例:

connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::btnslot); 

一一对应, ui里的pushButton控件时信号的发送者,发送了一个cliced点击信号,当前主窗口接收了这个信号,接收后调用当前窗口的btnslot方法,也就是所说的槽函数,进行了响应。

4、第五个参数 

当然,实际上Qt的connect是五个参数,还有最后一个参数用于指定信号槽连接类型,但是我们一半不写,因为默认是自动连接类型。我们看看第五个参数类型:

AutoConnection 自动连接,Qt会根据信号发送者和接收者的线程自动选择连接类型。
DirectConnection 直接连接,信号发送时,槽函数会立即在发送者所在的线程中执行。
QueuedConnection 队列连接,信号发送时,槽函数会被投递到接收者所在的线程的事件队列中,在接收者线程空闲时执行。
BlockingQueuedConnection 阻塞队列连接,与QueuedConnection类似,但发送者会等待槽函数执行完成后才继续执行。
UniqueConnection 唯一连接,确保相同的信号和槽不会被重复连接。

在Qt中使用这些连接类型来控制信号槽的行为,以确保在多线程环境下正确地处理信号和槽的执行顺序和线程关系。

二、五种槽函数写法

1、第一种: Qt4写法

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(btnslot()))

现在呢已经不推荐这种写法,因为如果SIGNAL写错了,或者信号名字、槽函数名字写错了,
编译器检查不出来,导致程序无响应,引起不必要的误解,也不便于找到问题。

2、第二种: Qt5写法

connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::btnslot);

推荐使用这种写法,信号名字、槽函数名字写错了,编译器会直接报错。

3、第三种:lambda表达式写法

connect(ui->pushButton,&QPushButton::clicked,[=](参数){
   //具体代码
   QMessageBox::information(this,"title","Qt5_signal_slot");
   }); 

推荐使用,适用于slot代码比较少的逻辑

注:槽函数里写参数,可以比实际的参数数量少,比如实际有一个形参,我们就可以不写,可以写那一个,但是不可以写两个 。

4、第四种:牵线法

这种方法就是在ui控件上,点击控件绑定一个槽函数,然后再自己写槽函数逻辑,但是看着比较混乱,不太推荐。

 5、第五种:自动生成法

在ui设计界面里直接点击控件,选择转到槽,再在里面选择槽函数。(通过这个方式,还可以很直观的看到某个控件有哪些槽函数)

而且这个方法用的挺多的,很方便,同时也可以选择自己手写,命名是on_控件名_信号名;分别在.h声明和.cpp实现就是,如果是自定义的槽函数一般都是do开头

比如我对ui界面的一个pushbutton控件绑定槽函数

void MainWindow::on_pushButton_clicked()
{
    QMessageBox::information(this,"title","Qt5_signal");
    close();
}

以上就是Qt槽函数五种常用写法介绍。


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

相关推荐

  1. QT GUI函数介绍

    2024-03-22 08:30:03       41 阅读
  2. QT 信号与 connect 三写法

    2024-03-22 08:30:03       59 阅读
  3. QT事件

    2024-03-22 08:30:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 08:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 08:30:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 08:30:03       82 阅读
  4. Python语言-面向对象

    2024-03-22 08:30:03       91 阅读

热门阅读

  1. 物联网在工业自动化中的作用

    2024-03-22 08:30:03       38 阅读
  2. dgl安装

    2024-03-22 08:30:03       43 阅读
  3. Android获取应用/系统常用参数

    2024-03-22 08:30:03       42 阅读
  4. Flutter开发中问题及解决方案

    2024-03-22 08:30:03       30 阅读
  5. 开发chrome扩展( 禁止指定域名使用插件)

    2024-03-22 08:30:03       44 阅读
  6. 解释什么是事件冒泡和事件捕获。

    2024-03-22 08:30:03       39 阅读
  7. GD32/STM32 CAN通讯配置及应用

    2024-03-22 08:30:03       45 阅读
  8. 复试专业前沿问题问答合集3

    2024-03-22 08:30:03       35 阅读
  9. ARM-UART实验

    2024-03-22 08:30:03       47 阅读
  10. 本文解释什么是HTTPS及其工作原理

    2024-03-22 08:30:03       44 阅读
  11. https成功后怎么让输域名直接打开https

    2024-03-22 08:30:03       44 阅读