Qt的信号和槽可以传递int、double等c++常用类型变量,也可以传递QVector、QMap等Qt的容器类(当然也可以传递Qt定义的类型)。

   那么Qt的信号和槽如何传递自定义的结构体呢。

   首先在定义结构体的同时需要使用Q_DECLARE_METATYPE。通过这个宏定义可以将自定义的类型注册到Qt的元类型中,从而被Qt识别。

  其次在信号端发射的信号类型应该是QVariant,QVariant是多种类型的联合,QVariant类中有个SetValue(T& value)方法,将自定义 T 类型的数据保存到QVariant对象中,可以理解为是自定义类型被封装成了QVariant的形式,这样,我们自定义的T类型的对象就能够通过所有参数和返回值为QVarian类型传递。

 

     在发射信号之前,将自定义的结构体用QVariant包裹一下,就可以发射了。

 

    在槽函数这边,信号类型也定义为QVariant,接收后用该结构体将数据取出来就完成了自定义结构体信号的一次传递

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐