QT 类静态函数作为回调函数

(一) C++回调函数、静态函数、成员函数踩过的坑。
明确一点即回调函数需要是静态函数。原因:
普通的C++成员函数都隐含了一个this指针作为参数,这样使得回调函数的参数和成员函数参数个数不匹配。

以前在使用回调函数的数据都是定义一个全局变量,把回调函数的返回结果给这个全局变量,然后在定时去刷新这个全局变量,这样虽然可以实现功能,但是方法不是很好 。

(二) 今天使用类的静态函数作为回调函数,具体方式如下,
(1) 在头文件中定义类
    class CardDataDispose : public QObject 
    {
        Q_OBJECT
    public:

        static void callback(int device, int msg, int param1, void *param2);//回调函数
        void data(QString cardID, QString cardAnswer);
    };
(2) 在引用回调类的源文件中设置回调函数。
    TB_SetCallbackAddr(CardDataDispose::callback);
(3) CardDataDispose回调函数的原型
    void CardDataDispose::callback(int device, int msg, int param1, void *param2)
    {
        CardDataDispose *a;
        a->data("1" , "2");

    }

    void CardDataDispose::data(QString cardID, QString cardAnswer)
    {
        引用回调函数的类
        UBBoardController *b;
        b->receiveCardData(cardID, cardAnswer);
    }
    
(三) 通过以上把回调函数封装成一个类,在收到数据后直接调用receiveCardData()函数就可以传输数据,不需要开启定时器刷新了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值