【发布时间】:2020-05-15 21:35:03
【问题描述】:
我需要将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();
我不能从QMetaType::create() 做void* 的dynamic_cast
我尝试了qobject_cast 或from,但如果无效也不会失败
我如何知道QObject* from 是否是指向QObject 派生类的有效指针?
【问题讨论】:
标签: c++ qt qobject qmetaobject qmetatype