通过isRegistered()方法判断
在Qt跨线程传参时,使用信号槽connect或者调用QMetaInvokeMethon时,传递的参数的类型通常要注意是不是已在Qt的元对象系统中注册过了,Qt提供了方法来判断类型是否被注册:
bool QMetaType::isRegistered(int type)
其中参数是枚举类型,参数例子:
QMetaType::Int
QMetaType::QString
使用代码中判断结果:
qDebug() << QMetaType::isRegistered(QMetaType::QJsonObject);
//输出true或false
//这里QJsonObject类输出的是true
更直接的方法
正常来说,只要你想判断的类型在QMetaType::Type的枚举列表中,就是Qt元对象系统自带的类型。
只要是QMetaType::自动补全的类型,其对象都能直接在QMetaInvokeMethon中当作参数被传递。
所有Qt元对象系统自带类型,都可在Qt的帮助文档中QMetaType::Type枚举列表中查看。