Мне нужно преобразовать 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
никогда не имеет значение null, но, если userType
не относится к базовому классу QObject
, from
не является допустимым указателем QObject
, и при вызове происходит сбой:
from->metaObject();
Я не могу сделать dynamic_cast
из void*
из QMetaType::create()
Я пробовал qobject_cast
из from
, но это не дает сбоя, если оно недействительно
Как узнать, если QObject* from
действительный указатель на QObject
производный класс?