当前位置:网站首页>【QT】回调函数的实现
【QT】回调函数的实现
2022-08-04 21:26:00 【Cappuccino-jay】
回调函数是你写一个函数,让预先写好的系统来调用。你调用系统的函数,是直调。让系统调用你的函数,就是回调。
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、运行结果输出

边栏推荐
- 链栈的应用
- Spss-系统聚类手算实操
- proe和creo的区别有哪些
- [2022 Hangzhou Electric Multi-School 5 1003 Slipper] Multiple Super Source Points + Shortest Path
- 2、字符集-编码-解码
- Three ways to set a specific device UWP XAML view
- visual studio 2015 warning MSB3246
- ue unreal 虚幻 高分辨率无缩放 编辑器字太小 调整编辑器整体缩放
- 使用堡塔应用管理器配置laravel队列方法
- 零基础都能拿捏的七夕浪漫代码,快去表白或去制造惊喜吧
猜你喜欢

立即升级!WPS Office 出现 0day 高危安全漏洞:可完全接管系统,官方推出紧急更新

【2022牛客多校5 A题 Don‘t Starve】DP

数电快速入门(三)(卡诺图化简法的介绍)

伺服电机矢量控制原理与仿真(1)控制系统的建立

【2022杭电多校5 1012题 Buy Figurines】STL的运用

Red team kill-free development practice of simulated confrontation

【2022杭电多校5 1003 Slipper】多个超级源点+最短路

unity2D横版游戏教程8-音效

AXI interface application of Zynq Fpga image processing - the use of axi_lite interface

PowerCLi 批量配置NTP
随机推荐
boostrap多选PID查找端口 window
PCBA方案设计——厨房语音秤芯片方案
如何一键重装win7系统?重装win7系统详细教程
Pinduoduo open platform order information query interface [pdd.order.basic.list.get order basic information list query interface (according to transaction time)] code docking tutorial
LeetCode: 406. 根据身高重建队列
LayaBox---TypeScript---举例
unity2D横版游戏教程8-音效
JdbcTemplate概述和测试
模拟对抗之红队免杀开发实践
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd6 in position 120: invalid continuation byte
AI/ML无线通信
立方度量(Cubic Metric)
Chapter7 : Network-Driven Drug Discovery
bracket matching
3、IO流之字节流和字符流
27. Dimensionality reduction
传奇服务器需要什么配置?传奇服务器租用价格表
27.降维
8 年产品经验,我总结了这些持续高效研发实践经验 · 协同篇
【PCBA program design】Grip dynamometer program