鱼C论坛

 找回密码
 立即注册
查看: 3548|回复: 0

[技术原创] 129-QVariant(变量类)-【扫盲】

[复制链接]
发表于 2016-10-28 16:19:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2016-10-29 10:33 编辑

1.gif


QVariant类是最常见的Qt的数据类型的一个共同体(union)。

一个QVariant对象在一个时间只保存一个但一类型的单一值(字符串列表就是多值的。。。)。

使用toT()函数复制以前的QVariant对象,然后对其进行转换,所以之前的QVariant对象并不会改变。

‘T’就是一种数据类型,Int、Float、String都行哈~

QVariant是QtCore库的一部分,所以没有提供QtGui中定义的数据类型进行转换。

所以QColor、QImage都无法通过toColor()、toImage()这样事儿的转换哈~

但可以使用QVariant::value()或者qVariantValue()模板来完成所有转换,看后面的130就值了。

对于同一种转换,canConvert()和convert()函数并不一定返回同样的结果!

换句话说,假如提供了合适的数据时,这两个类型间可以进行转换~

但是!

如果提供的数据不合适,那么转换就会失败!

故而,这哥俩儿返回值就不同,就是下面表里的意思~

例如:

QString str = “123”;

QString str1 = “FishC”;


str可以转换为int类型,因为只有数字字符,canConvert()和convert()返回都会为true。

str1包含了非数字字符,真正进行转换时,canConvert(),true  convert(),false。



使用canConvert()函数返回true的数据类型组合就是下面那张表。

不二给你翻译下哈~

1.png


类型 自动转换到
QMetaType::Bool Char、Double、Int、LongLong、String、UInt、ULongLong
QMetaType::ByteArray Double、Int、LongLong、String、UInt、ULongLong
QMetaType::Char Bool、Int、UInt、LongLong、ULongLong
QMetaType::Color String
QMetaType::Date DateTime、String
QMetaType::DateTime Date、String、Time
QMetaType::Double Bool、Int、LongLong、String、UInt、ULongLong
QMetaType::Font String
QMetaType::Int Bool、Char、Double、LongLong、String、UInt、ULongLong
QMetaType::KeySequence Int、String
QMetaType::List StringList(前提列表中项目可以转换为字符串)
QMetaType::LongLong Bool、ByteArray、Char、Double、Int、String、UInt、ULongLong
QMetaType::Point PointF
QMetaType::Rect RectF
QMetaType::String Bool、ByteArray、Char、Color、Date、DateTime、Double、Font
Int、KeySquence、LongLong、StringList、Time、UInt、ULongLong
QMetaType::StringList List、String(列表中仅有一个项目)
QMetaType::Time String
QMetaType::UInt Bool、Char、Double、Int、LongLong、String、ULongLong
QMetaType::ULongLong Bool、Char、Double、Int、LongLong、String、UInt

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表