1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
使用canConvert判断能否转换
QVariant v = 42;
v.canConvert<int>(); // returns true
v.canConvert<QString>(); // returns true
但要注意canConvert返回true,不一定就能调用convert成功。只有同时为true才行。比如string里面包含的不是数字。但
canConvert(QMetaType::fromType<int>())会返回true.但convert会失败。
有方便的api,如
toInt();但对GUI类型,比如QImage,没有toX这种函数,需要使用value模板函数:
QColor color = variant.value<QColor>();
v.typeName()//int
QVariant x; // x.isNull() == true
QVariant y = QVariant::fromValue(nullptr); // y.isNull() == true
MyCustomStruct s;
return QVariant::fromValue(s);
或v.setValue(s);
QList<int> intList = {7, 11, 42};
QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
QSequentialIterable iterable = variant.value<QSequentialIterable>();
for (const QVariant &v : iterable) {
qDebug() << v;
}
}
欢迎评论交流