• 9703阅读
  • 6回复

QVariant的疑惑 [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 正序阅读 楼主  发表于: 2010-05-29
QVariant主要用于什么场合?即为什么会有这样一个类?

到底
QVariant  vv=123; 和  QVariant  vv="123";   有什么区别?
我发现他们toInt() ,  toString()  ,  toByteArray()等等出来的结果 都是一样的...












[ 此帖被iiiyyyhhhsss在2010-05-29 16:51重新编辑 ]
离线qyf2010
只看该作者 6楼 发表于: 2011-05-04
看来也没有人真懂QVariant
离线gzfreeman
只看该作者 5楼 发表于: 2010-05-31
这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用。比如我们的table单元格可以是string,也可以是int,也可以是一个颜色值,那么这么多类型怎么返回呢?于是,Qt提供了这个QVariant类型,你可以把这很多类型都存放进去,到需要使用的时候使用一系列的to函数取出来即可。比如你把int包装成一个QVariant,使用的时候要用 QVariant::toInt()重新取出来。这里需要注意的是,QVariant类型的放入和取出必须是相对应的,你放入一个int就必须按int取出,不能用toString(), Qt不会帮你自动转换。
离线benbenmajia

只看该作者 4楼 发表于: 2010-05-31
manual很好很强大.
安然.....
离线dbzhang800

只看该作者 3楼 发表于: 2010-05-30
引用楼主iiiyyyhhhsss于2010-05-29 15:14发表的 QVariant的疑惑 :
QVariant主要用于什么场合?即为什么会有这样一个类?


这种问题,QVariant manual 中提到了:
Because C++ forbids unions from including types that have non-default constructors or destructors, most
interesting Qt classes cannot be used in unions. Without QVariant, this would be a problem for QObject::property()
and for database work, etc.

QVariant 属于 Qt 的Core模块,属于Qt的底层核心之一,ActiveQt、QtScript、QtDeclarative等都严重依赖于QVariant。

引用楼主iiiyyyhhhsss于2010-05-29 15:14发表的 QVariant的疑惑 :
到底
QVariant  vv=123; 和  QVariant  vv="123";   有什么区别?
我发现他们toInt() ,  toString()  ,  toByteArray()等等出来的结果 都是一样的...
.......


区别?不清楚你想了解到什么程度,一般来说 manual 中介绍的应该足够了:主要是两个构造函数和QVariant::type() 。对你两个来说一个是 int, 一个是const char* 转换成的 QString,显然type不同。

如果你想了解更底层的东西,直接看 qvariant 的源码就可以了,数据核心无非就是一个 union,和一个标记类型的type:传递的是整数 123,那么它union存储整数123,同时type标志Int;如果传递字符串,union存储字符串的指针,同时type标志QString。

至于你说的toInt,toString等等结果一样,也不值得奇怪,简单了解的话看manual,深入的话看源码。 123 转成 “123” 核心无非就是调用了 QString::number.
[ 此帖被dbzhang800在2010-05-30 09:43重新编辑 ]
离线yj_yulin

只看该作者 2楼 发表于: 2010-05-29
一般pc上的应用没有太大问题,不过在嵌入式里面可能消耗大了点.
离线rcyboom

只看该作者 1楼 发表于: 2010-05-29
可以参考别的语言得可变数据类型
说白了就是自适应类型,但是这个自适应类型是以牺牲性能为代价得,一般用途不大,建议少用。
但有的地方需要用到它,比如你的程序需要和其他人写的程序交换数据,而那个程序有可能使用别的语言写得之类得情况下。
最典型得就是windows下得ole或者com程序,比如用程序控制word,大部分数据都是Variant类型得。
快速回复
限100 字节
 
上一个 下一个