Qt中回调函数的实现

Qt中回调函数的实现


一、关于回调函数的介绍

这个关于回调函数的介绍可以查看知乎上关于回调函数的介绍通俗易懂
回调函数(callback)是什么.
上面的回答让我理解回调函数的还是[A 让 B 排序,B 会做排序,但排序需要知道哪个比哪个大,这点 B 自己不知道,就需要 A 告诉它。而判断大小本身是某种行为,既然 C 语言中不可以传进第一值的函数,就设计成传递第二值的函数指针,这个函数指针是 A 传向 B 的信息,用于描述判断大小这种行为。这里本来 A 调用 B 的,结果 B 又调用了 A 告诉它的信息,也就是 callback。]这句话,下面链接是关于全部的回答,具体可以点击链接查看
链接

二、回调函数使用的实列

1.调用回调函数的类

代码如下(示例):

//类的声明
#include <QMainWindow>
#include <QWidget>
typedef int(*lpFunc)(int,int);  // 函数指针
class CallbackA : public QWidget
{
    Q_OBJECT
public:
    explicit CallbackA(QWidget *parent = nullptr);


     void h_getstaic(lpFunc);       //调用回调函数
};


//类的实现
#include <QDebug>
CallbackA::CallbackA(QWidget *parent) : QWidget(parent)
{

}

void CallbackA::h_getstaic(lpFunc a_lpFunc)
{
    int i =a_lpFunc(5,6);
    qDebug()<<"回调函数返回的数值"<<i;
}

2.回调函数实现

代码如下(示例):

//类的声明
#include "callbacka.h"
class Widget : public QWidget
{
    Q_OBJECT

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

    CallbackA m_CallbackA;  //调用回调函数的类

    // 声明一个回调函数
    static int s_getPosition( int ,int);
};


//类的实现
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
  
    m_CallbackA.h_getstaic(&s_getPosition);
}

Widget::~Widget()
{
}

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

运行程序回看到程序打印的信息:
回调函数触发传入的数值是: 5 6
回调函数返回的数值 11


总结

这个关于回调函数的实列已经结束了,以上仅对自己学习回调函数做一个记录,如有错误之处,望大佬不吝赐教。


障碍与失败,是通往成功最稳靠的踏脚石,肯研究利用它们,便能从失败中培养出成功。

下面是一个简单的示例代码,演示了如何在Qt实现回调函数: ```cpp #include <QCoreApplication> #include <QDebug> class CallbackClass : public QObject { Q_OBJECT public: explicit CallbackClass(QObject *parent = nullptr) : QObject(parent) {} public slots: void callbackFunction(int value) { qDebug() << "Callback received value:" << value; } }; class CallerClass : public QObject { Q_OBJECT public: explicit CallerClass(QObject *parent = nullptr) : QObject(parent) {} void doSomething() { // 假设这里触发了某个事件或条件满足时调用回调函数 int value = 42; // 发射信号,并将参数传递给回调函数 emit callbackSignal(value); } signals: void callbackSignal(int value); }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); CallerClass caller; CallbackClass callback; // 连接信号和槽 QObject::connect(&caller, &CallerClass::callbackSignal, &callback, &CallbackClass::callbackFunction); // 调用CallerClass的函数,会触发回调函数被调用 caller.doSomething(); return a.exec(); } #include "main.moc" ``` 在这个示例,我们创建了两个类:`CallerClass`和`CallbackClass`。`CallerClass`负责执行某个操作,并在需要时触发回调函数。`CallbackClass`是回调函数所在的类。 在`CallerClass`,我们定义了一个信号`callbackSignal`,它带有一个整数参数。当某个事件发生或条件满足时,我们发射这个信号,并传递一个整数值给回调函数。 在`CallbackClass`,我们定义了一个槽函数`callbackFunction`,它接收一个整数参数。当信号被发射时,这个槽函数将被调用,并打印接收到的整数值。 在`main`函数,我们创建了`CallerClass`和`CallbackClass`的实例,并使用`QObject::connect`函数将信号和槽连接起来。然后,我们调用`CallerClass`的`doSomething`函数,这会触发回调函数被调用。 这只是一个简单的示例,你可以根据实际需求进行修改和扩展。希望对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值