#ifndef CONTROLLER_H
#define CONTROLLER_H
//
// 文件名:Controller.h
// 工程名:CppCallback
// 开发环境:MacOS 10.13.1 Qt5.9.1
// 简介:回调函数使用
// 创建日期:Created by chenyijun on 2018/03/18.
// 版权:Copyright © 2018年 chenyijun. All rights reserved.
//
#include <QObject>
typedef void (*CallBackFuntion)(void *userParam, int param1, int param2, bool param3);
class Controller : public QObject
{
Q_OBJECT
public:
explicit Controller(QObject *parent = nullptr);
void copyFileOperation(CallBackFuntion callback, void *userParam);
signals:
public slots:
};
#endif // CONTROLLER_H
//
// 文件名:Controller.cpp
// 工程名:CppCallback
// 开发环境:MacOS 10.13.1 Qt5.9.1
// 简介:回调函数使用
// 创建日期:Created by chenyijun on 2018/03/18.
// 版权:Copyright © 2018年 chenyijun. All rights reserved.
//
#include "Controller.h"
#include <QTime>
#include <QFile>
#include <QDebug>
Controller::Controller(QObject *parent) : QObject(parent)
{
}
void Controller::copyFileOperation(CallBackFuntion callback, void *userParam)
{
callback(userParam, 1, 0, true);
QTime runTime;
runTime.start();
QFile file("/Users/chenyijun/project/CppCallback/MonoFramework.pkg");//用一个大文件测试才能看到效果
bool isCopy = file.copy("/Users/chenyijun/project/CppCallback/copyTest.pkg");
int useTime = runTime.elapsed();//耗时:毫秒
callback(userParam, 0, useTime, isCopy);
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//
// 文件名:mainwindow.h
// 工程名:CppCallback
// 开发环境:MacOS 10.13.1 Qt5.9.1
// 简介:回调函数使用
// 创建日期:Created by chenyijun on 2018/03/18.
// 版权:Copyright © 2018年 chenyijun. All rights reserved.
//
#include <QMainWindow>
#include <QTime>
#include "Controller.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void initView();
void initData();
void initConnect();
/* 功能:复制文件回调测式
* 第一个参数:当前使用者指针,
* 第二个参数:状态,1表示开始,0表示结束
* 第三个参数:复制文件耗时
* 第四个参数:复制是否成功
*/
static void copyFileCallBack(void *userParam, int nStatus, int nTimeConsuming, bool isCopy);
void callBackDeal(int nStatus, int nTimeConsuming, bool isCopy);
public slots:
void slotCopyFile();
private:
Ui::MainWindow *ui;
Controller *m_pController;
int m_nType;
};
#endif // MAINWINDOW_H
//
// 文件名:mainwindow.cpp
// 工程名:CppCallback
// 开发环境:MacOS 10.13.1 Qt5.9.1
// 简介:回调函数使用
// 创建日期:Created by chenyijun on 2018/03/18.
// 版权:Copyright © 2018年 chenyijun. All rights reserved.
//
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
initView();
initData();
initConnect();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initView()
{
}
void MainWindow::initData()
{
m_pController = NULL;
m_nType = 10;
m_pController = new Controller(this);
}
void MainWindow::initConnect()
{
connect(ui->pushButton_CopyFile, SIGNAL(clicked()), this, SLOT(slotCopyFile()));
}
void MainWindow::slotCopyFile()
{
if(NULL != m_pController)
{
m_pController->copyFileOperation(copyFileCallBack, this);
}
}
void MainWindow::copyFileCallBack(void *userParam, int nStatus, int nTimeConsuming, bool isCopy)
{
MainWindow *pThis = (MainWindow*)userParam;
qDebug() << "copyFileCallBack======pThis->m_nType=====" << pThis->m_nType;
pThis->callBackDeal(nStatus, nTimeConsuming, isCopy);
}
void MainWindow::callBackDeal(int nStatus, int nTimeConsuming, bool isCopy)
{
qDebug() << "callBackDeal======nStatus=====" << nStatus << "======nTimeConsuming=" << nTimeConsuming << "======isCopy======" << isCopy;
}
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}