C++回调函数跨模块

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
















猜你喜欢

转载自blog.csdn.net/chenyijun/article/details/79606201