【QT】回调函数的实现

回调函数是你写一个函数,让预先写好的系统来调用。你调用系统的函数,是直调。让系统调用你的函数,就是回调。

A 让 B 做事,根据粒度不同,可以理解成 A 函数调用 B 函数,或者 A 类使用 B 类,或者 A 组件使用 B 组件等等。反正就是 A 叫 B 做事。当 B 做这件事情的时候,自身的需要的信息不够,而 A 又有。就需要 A 从外面传进来,或者 B 做着做着再向外面申请。对于 B 来说,一种被动得到信息,一种是主动去得到信息。有些人给这两种方式一个术语,叫信息的压送( push),和信息的拉取( pull)。

1、callback.h

#ifndef CALLBACK_H
#define CALLBACK_H

/*A 让 B 排序,B 会做排序,但排序需要知道哪个比哪个大,
 * 这点 B 自己不知道,就需要 A 告诉它。而判断大小本身是某种行为,
 * 既然 C 语言中不可以传进第一值的函数,就设计成传递第二值的函数指针,
 * 这个函数指针是 A 传向 B 的信息,用于描述判断大小这种行为。
 * 这里本来 A 调用 B 的,结果 B 又调用了 A 告诉它的信息,也就是 callback
*/

#include <QWidget>

typedef double(*cbFunc)(double,double);      //函数指针

class CallBack : public QWidget
{
    Q_OBJECT
public:
    explicit CallBack(QWidget *parent = nullptr);

    void m_getData(cbFunc);       //调用回调函数

signals:

public slots:
};

#endif // CALLBACK_H

2、callback.cpp

#pragma execution_character_set("utf-8")
#include "callback.h"
#include <QDebug>

CallBack::CallBack(QWidget *parent) : QWidget(parent)
{

}

void CallBack::m_getData(cbFunc m_cbFunc)
{
    double i = m_cbFunc(3.6,5.7);
    qDebug() << "回调函数返回的数值: " << i;
}

3、widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "callback.h"

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    CallBack m_callback;

    static double m_getPosition(double a, double b);

};

#endif // WIDGET_H

4、widget.cpp

#pragma execution_character_set("utf-8")
#include "widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //通过传参的形式将该函数的地址传递给其他函数,然后在其他函数中通过函数指针调用该函数 --回调
    m_callback.m_getData(&m_getPosition);
}

Widget::~Widget()
{

}

double Widget::m_getPosition(double a, double b)
{
    qDebug() << "回调函数触发传入的数值是: " << a << b;
    return a+b;
}

5、运行结果输出

在这里插入图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++ Qt是一种流行的GUI开发框架,它结合了C++语言的强大性能和Qt库的丰富功能。在Qt中,回调函数是一种常见的编程模式,用于实现事件处理和信号与槽机制。 回调函数是指在特定事件发生时被调用的函数。在Qt中,回调函数通常用于处理用户界面的事件,例如按钮点击、菜单选择等。当这些事件发生时,Qt会自动调用相应的回调函数来执行特定的操作。 在C++ Qt中,回调函数可以通过以下几种方式实现: 1. 普通函数指针:可以将一个普通的C++函数指针作为回调函数传递给Qt的信号与槽机制。当信号触发时,Qt会调用该函数指针所指向的函数。 2. 函数对象:可以使用C++中的函数对象(Functor)作为回调函数。函数对象是一个类对象,重载了函数调用运算符(),可以像函数一样被调用。在Qt中,可以将函数对象作为回调函数传递给信号与槽机制。 3. Lambda表达式:C++11引入了Lambda表达式,它可以方便地定义匿名函数。在Qt中,可以使用Lambda表达式作为回调函数,直接在信号与槽连接语句中定义并传递Lambda表达式。 下面是一个简单的示例,演示了如何在C++ Qt中使用回调函数: ```cpp #include <QApplication> #include <QPushButton> // 普通函数作为回调函数 void myFunction() { qDebug() << "Button clicked!"; } int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Click me!"); QObject::connect(&button, &QPushButton::clicked, myFunction); button.show(); return app.exec(); } ``` 在上面的示例中,我们创建了一个QPushButton按钮,并将其clicked信号与myFunction函数进行连接。当按钮被点击时,myFunction函数会被调用,并输出一条消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cappuccino-jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值