如果使用以下宏将类型声明为q元类型,则可以将QList<YourType>
转换为QVariant
:
Q_DECLARE_METATYPE(MyType);
之后,转换甚至是隐含的:
QList<MyType> list;
QVariant variant = QVariant::fromValue(list);
现在我的问题是如何将variant
转换回QList<MyType>
。
QVariant
提供了可以用于检查的方法canConvert<T>
:
if( variant.canConvert<QList<MyType>>() ) {
QList<MyType> list = variant.value<QList<MyType>>();
...
}
只是为了清楚地结合我在评论中得到的内容和接受的答案。
QList<MyType> convertToMyType(QVariant variant) {
if( variant.canConvert<QList<MyType>>() ) {
return variant.value<QList<MyType>>();
}
else {
// Exception? Empty list?
// depends on circumstances
}
}