#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(); }