我需要转换QVariant
为其他用户自定义类。
所有类都必须派生自QObject
.
我可以在编译时检查目标类型,因为它是模板,但源是QVariant
这样,无法检查。
我的方法:
template<class T, typename = std::enable_if_t<std::is_base_of<QObject, T>::value> > static bool canConvert(const QVariant& var)
称之为:
QObject* from = reinterpret_cast<QObject*>(QMetaType::create(var.userType()));
from
永远不会为空,但如果userType
不是QObject
基类,from
则不是有效QObject
指针,并且调用在调用时崩溃:
from->metaObject();
我不能dynamic_cast
从void*
QMetaType::create()
我试过qobject_cast
了,from
但如果它无效,它不会失败
我如何知道是否是指向派生类QObject* from
的有效指针?QObject