新建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); //使用回调函数
}
运行程序,点击按键,打印信息如下