Qt:qRegisterMetaType为Qt信号和槽添加自定义参数类型

背景

qt信号和槽之间的参数传递默认只能传递qt内部已有的类型,例如QString等,若我们自定义类型作为参数时,虽然编译不会报错,但运行时会提示connect无效,无法识别自定义的类。

此时需要我们将自定义类进行注册,之后connect才可以使用

自定义类型并注册

//自定义类型
Struct MyTestSt{
	int x{0};
	int y{0};
}

	/*
	为信号和槽声明自定义类,该声明一般在类声明之后
	被声明的类需要提供公共默认构造函数、公共复制构造函数和公共析构函数
	*/
//1、声明一个新的元类型,该宏会使QMetaType知道该类型,声明之后就可以使用QVariant调用该类
Q_DECLARE_METATYPE(MyTestSt);

//2、若想要声明的类可以在信号和槽中使用还需要注册该类,后面括号保持为空,否则就是相当于定义别名
static int id_my_struct = qRegisterMetaType<MyTestStMyTestSt>>();

//3、之后就可以定义带有自定义参数的信号和槽函数
signals:
	void test_signal_show(const MyTestSt)