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