我正在使用Momentics IDE(原生SDK)开发BlackBerry 10移动应用程序。
我有一个listview,我想用C ++来处理它的项目(我需要使用C ++而不是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*'"
有人可以帮我吗?
答案 0 :(得分:17)
您可以尝试使用qvariant_cast和qobject_cast。
QObject *object = qvariant_cast<QObject*>(selectItem);
Category *category = qobject_cast<Category*>(object);
此外,永远不要将任何持久性语句放入Q_ASSERT。断言未启用时不会使用它。
答案 1 :(得分:15)
编辑:适用于非QObject派生类型(参见本次案例的最终竞赛答案)
首先,您需要注册您的类型才能成为QVariant托管类型的一部分
//customtype.h
class CustomType {
};
Q_DECLARE_METATYPE(CustomType)
然后,您可以通过以下方式从QVariant
检索自定义类型:
CustomType ct = myVariant.value<CustomType>();
相当于:
CustomType ct = qvariant_cast<CustomType>(myVariant);