QT:类中静态方法(回调函数)调用类中的信号
- 对于回调函数一般类型都应当是void(* 类型)来定义。这时候如果要给类型附实参函数的话,函数必须要有地址。但普通的成员函数需要实例化对象后才能够有地址(具体我也不知道,实例化对象后有一个this指针啥的。)
- 既然要用到静态函数做回调函数,我们知道静态方法只能调用类中的静态成员。那如果我们要在回调函数中emit QT中的信号呢?
- 我们可以定义一个静态的本类的对象myipdata。比如Ipdata类中msg_callback()函数为静态回调函数,signalList()为一个信号。
static IPdata * myipdata;
void IPdata::msg_callback(void *msg_data, char *msg_topic, char *msg_type)
signals:
void signalList();
- 静态变量必须要初始化。
IPdata * IPdata::myipdata = nullptr;
然后再初始化类时要定义myipdata,connect可以忽略。
IPdata::IPdata(QObject *parent) : QObject(parent)
{
myipdata = this;
connect(this,SIGNAL(signalList()),this,SLOT(emitqmlsignal()));
}
- 然后我们在回调函数直接调用这个静态对象的信号就是类的信号了
emit myipdata->signalList();