1、槽函数

发布时间 2023-11-20 17:30:13作者: 秃头的C#

作用

   用于组件和组件之间,组件和窗口之间进行通信

  信号:本质上是个函数(很特殊,只有声明,没有定义,没有源码), 所有的组件QT都已经定义好了对应的信号

     如何查看某个类(组件)有哪些信号

                              方法一:右键点击组件,转到槽即可看到该组件的所有信号

                              方法二:打开QT助手,搜索类,查看到所有的信号声明和介绍

    槽函数 : 就是个普通函数,当信号产生的时候,槽函数会被自动调用执行相应的任务

生成槽函数

  右键转到槽函数

  QT工程自动生成了如下代码:

//声明一个私有的槽函数   slots槽函数的声明
private slots:   
    void on_pushButton_clicked();
void MainWindow::on_pushButton_clicked()  //槽函数的定义
 {

 }

关联信号与槽函数

  方法一:借助集成开发环境QT creator自动关联--》右键转到槽函数

  方法二:程序员自己写代码关联信号与槽函数

connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
参数:  sender --》信号的发送者
       signal --》发送什么信号
       receiver --》信号的接收者
       method --》要调用执行的槽函数
比如:connect(ui->bt2,SIGNAL(clicked()),this,SLOT(fun()));
// 目前官方推荐的写法优点在实际编程中不用考虑参数类型,注意:当前类名为对应函数的类
connect(ui->bt2,&当前类名::clicked,this,&当前类名::fun);

信号与槽的特点

  • 一个类如果要使用信号与槽,必须在这个类的定义中加上Q_OBJECT这个宏定义
  • 同一个信号可以关联多个不同的槽函数(此时多个槽函数都会被调用,槽函数的调用顺序是依照你关联的先后顺序依次调用)
  • 同一个槽函数可以被不同的信号关联
  • 信号如果带参数,槽函数可以带参数,也可以不带
    void cursorPositionChanged(int oldPos, int newPos)  //这个信号带有两个int类型的参数
    void editingFinished()  //这个信号不带任何参数