当前位置: 首页 > article >正文

34.Qt使用回调函数

新建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_NAMESPACE

typedef void (*FnCallback)(void* poAny, QString str); //函数指针

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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.kler.cn/a/545476.html

相关文章:

  • 财务主题数据分析-企业盈利能力分析
  • 人工智能时代下ai智能语音机器人如何以假乱真?
  • Oracle DBA 诊断及统计工具-1
  • Navicat导入海量Excel数据到数据库(简易介绍)
  • 前端IndexedDB使用教程
  • AI成为基础设施有哪些研究方向:模型的性能、可解释性,算法偏见
  • 数据操作与事务:确保数据一致性的关键
  • 接口自动化框架篇:框架中的数据流转处理!
  • Mac 下使用多版本 Node
  • [RabbitMQ] RabbitMQ常见面试题
  • AI代理软件行业白皮书
  • [Spring] Spring常见面试题
  • webstorm 右下角git分支组件不显示如何恢复
  • DeepSeek解决服务器繁忙,使用API接口进行使用
  • 如何部署Deepseek-R1:从零开始的完整指南
  • 【线性代数】1行列式
  • Ansible内置模块之file
  • 实现pytorch注意力机制-one demo
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第七节】
  • [LeetCode] 二叉树 III — 110#平衡二叉树 | 257#二叉树的所有路径 | 404#左叶子之和 | 222#完全二叉树的节点个数