有个项目用的Qt,调用了第三方库,但是库里只有一个回调函数接口
typedef BOOL (__stdcall *on_connect)(RSECSH server_h, RSECSH session_h, unsigned short device_id);
回调函数需要在外部实现.我在类中实现这个函数,却发现没法将成员函数指针传进去,在公共文件中用全局函数实现,这样是可以的,但是回调函数触发的时候怎么通知其他类去处理?
#test.h
class test
{
public:
test();
static bool call_back(RSECSH server_h, RSECSH session_h, unsigned short device_id);
};
#test.cpp
static test *pTest
test::test()
{
pTest = this;
}
bool test::call_back(RSECSH server_h, RSECSH session_h, unsigned short device_id)
{
pTest->
}
定义一个全局静态的类指针
在构造函数的时候=this
回调函数调用这个全局的类指针就可以了
这个要看第三方库的调用函数中参数是否有额外的参数传入
没有的话,定义全局变量吧,多线程可能会有问题
QT采用的是信号-槽机制进行消息传递的,安全的方法是自定义信号,并在需要响应的类中定义信号接收与处理函数。关于信号-槽的机制,网上有很多,如QT 信号和槽的使用笔记 - 程序员大本营 https://www.pianshen.com/article/5623390488/,也可以自已去查询。
使用设置个bool全局变量传递。 设置例子:头文件xxx.h 上面添加 extern bool isok; xxx.cpp文件上添加 bool isok;
设置完毕后所有包含过xxx.h的文件中都可以使用 isok;如图 我想把图1里 camera.cpp 里回调函数里面的 q_Imagelist1传递给图4Mainwindow的函数中,就只需要
在camera.cpp 添加 QQueue<QImage> q_Imagelist1;
在camera.h 添加extren QQueue<QImage> q_Imagelist1;
这样QQueue<QImage> 类型的q_Imagelist1就传递出去了
补充一点,mainwind.cpp需要包含“camera.h”