首页 一天一个Qt类系列3:QVariant
文章
取消

一天一个Qt类系列3:QVariant

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;
    }
   
}

欢迎评论交流

本文由作者按照 CC BY 4.0 进行授权