PavelK
@PavelK

Почему qvariant_cast странно себя ведёт?

Приветствую!
В общем есть некий указатель на класс (к примеру, ProductItem), нужно передать его с помощью QVariant
передаю так:
ProductItem * item = new ProductItem(this);
QVariant MyClass::getItem()
{
return qVariantFromValue(static_cast<WBaseItem*>(item));
}

это упрощённо, разумеется класс после выхода из функции не разрушается и гарантирую, что он существует.
дальше в нужном месте уже кастую:
WBaseItem * item = qvariant_cast<WBaseItem*>(getItem());

Так вот, item всегда 0, хотя если вызвать qDebug()<<getItem(); будет явно указано
QVariant(WBaseItem*, ProductItem(0x1665e70) )

ProductItem - наследуется от WBaseItem. Если передавать не через QVariant, то через dynamic_cast всё проходит нормально.

Подскажите, пожалуйста, как правильно передать?

P.S. Про Q_DECLARE_METATYPE(WBaseItem*) читал, сделал, не пашет.

Крайне странно то, что в некоторых других случаях работает нормально.
В них другие классы то же наследуются от WBaseItem но приводятся к нему нормально, а в текущем не хочет, хотя сам класс, который наследуется простой... чертовщина какая-то.
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
PavelK
@PavelK Автор вопроса
Решилось за 3 часа зря потерянного времени.
Дело было в виртуальном классе, qvariant_cast видимо не знал как это обработать, хотя canConvert выдавал, что может.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы