34.Qt使用回调函数

devtools/2025/2/14 4:02:30/

新建Qt项目,添加回调函数所在的类Callback

项目文件如下所示

Callback.h代码

#ifndef CALLBACK_H
#define CALLBACK_H#include <QObject>class Callback : public QObject
{Q_OBJECT
public:explicit Callback(QObject *parent = nullptr);public:static void callbackFun(void* poAny,  QString str); //被调用的函数
};#endif // CALLBACK_H

Callback.cpp代码

#include "Callback.h"
#include <QDebug>
Callback::Callback(QObject *parent) : QObject(parent)
{}void Callback::callbackFun(void *poAny, QString str)
{Callback *pCall = (Callback*)poAny;if(!pCall)return;qDebug() << "callbackFun: " << str;
}

在mainwindow.ui上添加一个QPushButton

mainwindow.h代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "Callback.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEtypedef void (*FnCallback)(void* poAny, QString str); //函数指针class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;Callback m_callback;FnCallback m_fnCallback; //函数指针
};
#endif // MAINWINDOW_H

mainwindow.cpp代码

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);m_fnCallback = Callback::callbackFun; //被调用的函数
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{QString str = "回调函数使用"; //传参m_fnCallback(&m_callback, str); //使用回调函数
}

运行程序,点击按键,打印信息如下


http://www.ppmy.cn/devtools/158668.html

相关文章

ubuntu部署postgresql+timescaladb时序数据库

ubuntu部署postgresqltimescaladb时序数据库 中间件版本 postgresql-1414.15-0ubuntu0.22.04.1timescaledb-2-postgresql-142.17.2~ubuntu22.04 pg数据库安装 sudo apt install -y postgresql-1414.15-0ubuntu0.22.04.1 sudo systemctl start postgresql sudo systemctl en…

SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning)

SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning) flyfish ms-swift是魔搭社区提供的大模型与多模态大模型训练部署框架。 https://github.com/modelscope/ms-swift 可扩展轻量级微调基础设施 依赖 PEFT (Parameter-Efficient Fine-Tuning): PEFT是一种针对大…

三天急速通关Spring6

三天急速通关Spring6 0 文章介绍1 介绍1.1 背景1.2 Spring2 Spring6入门程序2.1 准备环境2.2 配置文件2.3 Tips 3 IoC通过XML注入3.1 介绍3.2 Set注入3.2.1 简单类型注入 3.2.2 注入外部bean与内部bean3.2.3 其他类型注入3.3 Constructor注入&#xff0c;P注入&#xff0c;C注入…

2024主流Web框架横向对比:Gin、Laravel、ThinkPHP、Spring Boot及更多框架的选型指南

引言 随着Web开发的多样化,开发者需要根据项目需求选择合适的框架。本文从性能、开发效率、生态支持、学习曲线等维度,对比Gin(Go)、Laravel(PHP)、ThinkPHP(PHP)、Spring Boot(Java)、Django(Python)、Express.js(Node.js)和ASP.NET Core(C#)七大框架的核心优…

redis 缓存击穿问题与解决方案

前言1. 什么是缓存击穿?2. 如何解决缓存击穿?怎么做?方案1: 定时刷新方案2: 自动续期方案3: 定时续期 如何选? 前言 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据 流程图 为什…

RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析

1️⃣ 引言 在现代分布式系统架构中&#xff0c;&#x1f4e9;消息队列&#xff08;MQ&#xff09;是不可或缺的组件。它在系统&#x1f517;解耦、&#x1f4c9;流量削峰、⏳异步处理等方面发挥着重要作用。目前&#xff0c;主流的消息队列系统包括 &#x1f680;RocketMQ、&…

网络安全产品架构图 网络安全相关产品

一、信息安全产品分类 背景 美国将网络和信息安全产品分了9类&#xff1a;鉴别、访问控制、入侵检测、防火墙、公钥基础设施、恶意程序代码防护、漏洞扫描、取证、介质清理或擦除。中国公安部将网络和信息安全产品分了7类&#xff1a;操作系统安全、数据库安全、网络安全、病毒…

滑动窗口算法笔记(C++)

滑动窗口算法是一种基于双指针技巧的高效算法, 常用于解决数组或字符串上的一些特定问题. 算法讲解 基本概念 滑动窗口算法可以想象成在一个数组或字符串上有一个固定大小或者可变大小的窗口, 该窗口在数组或字符串上从左到右滑动. 在滑动的过程中, 根据具体问题的要求, 对窗…