QVariant类像是最常见的Qt的数据类型的一个共用体。
一个QVariant对象在一个时间只保存一个单一类型的单一值。
使用toT()函数来将QVariant对象转换为T类型。并且获取他的值。
toT()函数会复制QVariant对象,然后对其转换。所以QVariant对象并不会改变。
对于一个类型是否可以转换为一个特殊类型,可以使用canConvert()函数来判断。如果可以转换,则该函数返回true。
也可使用convert()函数将一个类型转换为其他不同的类型。如果转换成功则返回true。
如果无法进行转换,variant对象将会被清空。并且返回false.对于同一种转换,两函数convert(),并不一定返回相同的结果。
QVariant v1(15);
qDebug() << v1.toInt(); // 结果为15
QVariant v2(12.3);
qDebug() << v2.toFloat(); // 结果为12.3
QVariant v3("nihao");
qDebug() << v3.toString(); // 结果为"nihao"
QColor color = QColor(Qt::red);
QVariant v4 = color;
qDebug() << v4.type(); // 结果为QVariant::QColor
qDebug() << v4.value<QColor>(); // 结果为QColor(ARGB 1,1,0,0)
QString str = "hello";
QVariant v5 = str;
qDebug() << v5.canConvert(QVariant::Int); // 结果为true
qDebug() << v5.toString(); // 结果为"hello"
qDebug() << v5.convert(QVariant::Int); // 结果为false
qDebug() << v5.toString(); // 转换失败,v5被清空,结果为"0"