信号可以带参数,参数的类型,必须是元对象系统能够识别的类型, 即元类型。
下面这几个类型是自动注册的,不需要使用Q_DECLARE_METATYPE这个宏:
1.QObject继承下来的子类的指针;
2.QList, QVector, QQueue, QStack, QSet or QLinkedList这些T都是自动注册的;
3.QHash, QMap or QPair T1,和T2都是自动注册的;
4.QPointer, QSharedPointer, QWeakPointer这3个T必须是QObject的子类;
5.枚举类型要用Q_ENUM or Q_FLAG;
6.拥有Q_GADGET宏的类。
例如:自定义结构体,connect想通过结构体参数来传递
struct _ColorBalance
{
bool preserve_luminosity;
int cyan_red[3];
int magenta_green[3];
int yellow_blue[3];
};
signals:
void state_changed(_ColorBalance *color_balance);
connect(this, &ColorBalance::state_changed, pic, &Picture::ColorBalance);
如果不注册元类型,编译会报错:
ColorBalance.obj:-1: error: LNK2019: 无法解析的外部符号 "public: void __cdecl Colo