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

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_OBJECTpublic: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、运行结果输出

【QT】回调函数的实现相关推荐

  1. qt 回调函数设置界面_回调函数实现类似QT中信号机制(最简单)

    1. 定义回调接口类: class UIcallBack { public: virtual void onAppActivated() = 0; virtual void onShowMore() ...

  2. QT信号与槽——观察者模式——回调函数

    QT信号与槽--观察者模式--回调函数 1.QT信号与槽机制 1.1信号本质 信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时候 Qt 对应的窗口类会发出某个信号.比如 ...

  3. 在Qt中使用回调函数替代信号槽

    前言 在Qt中传数据,我们使用了一个信号和槽系统,但这并不意味着不能使用旧的经过验证的方法,即使用 CallBack回调函数功能. 事实上使用 CallBack 功能比信号和槽要快一些.并且当发送信号 ...

  4. QT 类静态函数作为回调函数

    (一) C++回调函数.静态函数.成员函数踩过的坑. 明确一点即回调函数需要是静态函数.原因: 普通的C++成员函数都隐含了一个this指针作为参数,这样使得回调函数的参数和成员函数参数个数不匹配. ...

  5. python的回调函数和构造重载

    背景:这个项目遇到的问题是,内部模块发生的事情要在PyQt构建的界面上表现出来,但是内部模块不能调用Qt类的函数,于是要用到回调函数,回调函数可以参数的形式传递给函数,但是我绕了个湾子,被一篇国外的文 ...

  6. qt槽函数如何传递多个参数_【Qt】信号和槽对值传递参数和引用传递参数的总结...

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  7. Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]

    1. 函数签名 函数类型也叫做函数签名,可以使用 fmt.Printf("%T") 格式化参数打印函数类型. package mainimport "fmt"f ...

  8. OpenCV(六)形态学操作1--基础:膨胀与腐蚀(回调函数)

    目录 形态学通用API:morphologyEx 一.基础理论 1.邻接关系 (1)四邻接: (2)D邻接: (3) 八邻接: 2.连通性 (1)四连通: (2)八连通: (3)m连通: 3.形态学基 ...

  9. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

最新文章

  1. 服务器系统摁c,如何系统有效学习c服务器开发
  2. UNITY 的GC ALLOC到底是什么
  3. 让字跑起来的HTML5标签,HTML5:标记文字
  4. 计算机网络资料篇(二)——快速理解网络协议
  5. nssl1257-A【数论】
  6. HBase体系架构说明
  7. 2019湖南多校第三场
  8. linux 控制台存储,技术|使用 Stratis 从命令行管理 Linux 存储
  9. 水文特点是什么意思_水文监测仪器设备简介
  10. Vue nextTick执行时机分析
  11. 传统emmc所用的sdio接口_SolidGear SD/SDIO/eMMC协议分析仪
  12. LeetCOde-394:字符串解码
  13. Oracle 官方文档地址
  14. 【Grub Grub2】万能优盘启动盘 (WinPE、LinuxPE)-- 方法1 U盘三分区法(不推荐,供参考)
  15. 重定向后路径上自动添加jsessionid=
  16. 申请Freenom免费顶级域名的正确做法
  17. offset 和 零点的一点解释
  18. 用遗传算法解决VRP问题
  19. 测试工具和测试自动化
  20. 暗影格斗3一直显示服务器,暗影格斗3重置的方法操作流程

热门文章

  1. 在两台设备chrome之间同步自己的书签
  2. Kd树实现knn算法(python)
  3. Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!
  4. ZeroClipboard2跨浏览器复制粘贴
  5. 几个好用的Visual Studio插件推荐。
  6. python2和python3的区别
  7. 南宁市第二十六中学:教研路漫漫,花香伴我行
  8. 无法连接到mysql数据库_无法连接到数据库服务器(mysql workbench)
  9. java面向对象的程序编程设计
  10. uniapp 获取设备唯一标识(OAID、AAID、AndroidID、IMEI等)插件 Ba-IdCode