Как включить QVariant в пользовательский класс?
Я разрабатываю мобильное приложение BlackBerry 10 с помощью Momentics IDE (собственный SDK).
У меня есть listview, который я хочу обрабатывать своими элементами, щелкая на С++ (мне нужно использовать С++, а не QML).
Я могу получить указательный путь с помощью команды "connect", но у меня проблема с разбором QVariant в пользовательский класс;
Q_ASSERT(QObject::connect(list1, SIGNAL(triggered(QVariantList)), this, SLOT(openSheet(QVariantList))));
QVariant selectItem = m_categoriesListDataModel->data(indexPath);
Я попытался использовать статический приведение, как показано ниже
Category* custType = static_cast<Category*>(selectItem);
но он возвращает:
"invalid static_cast from type 'QVariant' to type 'Category*'"
Может ли кто-нибудь помочь мне в этом?
Ответы
Ответ 1
Вы можете попробовать использовать qvariant_cast и qobject_cast.
QObject *object = qvariant_cast<QObject*>(selectItem);
Category *category = qobject_cast<Category*>(object);
Кроме того, никогда не помещайте постоянный оператор в Q_ASSERT. Он не будет использоваться, если assert не включен.
Ответ 2
ОБНОВЛЕНИЕ: работает для производного типа, отличного от QObject (см. ответ на финальный конкурс для этого случая)
Прежде всего, вам нужно зарегистрировать свой тип, чтобы быть частью управляемых типов QVariant
//customtype.h
class CustomType {
};
Q_DECLARE_METATYPE(CustomType)
Затем вы можете получить свой собственный тип из QVariant
следующим образом:
CustomType ct = myVariant.value<CustomType>();
что эквивалентно:
CustomType ct = qvariant_cast<CustomType>(myVariant);