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

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

Похожие вопросы