一、使用信号和槽传递自定义结构体
这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下。
一共有三种方法,可以让结构体在信号和槽之间传递。前两种方法可以让结构体在线程之间传递,最后一种方法只能在同一线程中传递。
Q_DECLARE_METATYPE
qRegisterMetaType(推荐)
直接传递
二、Q_DECLARE_METATYPE
需要宏Q_DECLARE_METATYPE和QVariant配合使用,首先使用宏Q_DECLARE_METATYPE将自定义结构以注册到metatype系统中,这样就能将自定义结构体包装成QVariant,然后在信号和槽之间通过传递QVariant,这样就能间接的传递自定义的结构体。
使用步骤如下:
1 使用Q_DECLARE_METATYPE注册自定义结构体
#include <QMetaType>
typedef struct People{
int age;
QString name;
}People;
Q_DECLARE_METATYPE(People);