QVariant
来源:互联网 发布:曲婉婷母亲受审 知乎 编辑:程序博客网 时间:2024/05/16 09:30
这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用。比如我们的table单元格可以是string,也可以是int,也可以是一个颜色值,那么这么多类型怎么返回呢?于是,Qt提供了这个QVariant类型,你可以把这很多类型都存放进去,到需要使用的时候使用一系列的to函数取出来即可。比如你把int包装成一个QVariant,使用的时候要用QVariant::toInt()重新取出来。这里需要注意的是,QVariant类型的放入和取出必须是相对应的,你放入一个int就必须按int取出,不能用toString(),Qt不会帮你自动转换。
数据核心无非就是一个 union,和一个标记类型的type:传递的是整数123,那么它union存储整数123,同时type标志Int;如果传递字符串,union存储字符串的指针,同时type标志QString。
QVariant 属于 Qt的Core模块,属于Qt的底层核心之一,ActiveQt、QtScript、QtDeclarative等都严重依赖于QVariant。
QVariant也可以进行嵌套存储,例如
QMap<QString, QVariant>pearMap;
pearMap["Standard"] =1.95;
pearMap["Organic"] =2.25;
QMap<QString, QVariant>fruitMap;
fruitMap["Orange"] =2.10;
fruitMap["Pineapple"] =3.85;
fruitMap["Pear"] = pearMap;
QVariant被用于构建QtMeta-Object,因此是QtCore的一部分。当然,我们也可以在GUI模块中使用,例如
QIconicon("open.png");
QVariant variant =icon;
// otherfunction
QIcon icon =variant.value<QIcon>();
我们使用了value()模版函数,获取存储在QVariant中的数据。这种函数在非GUI数据中同样适用,但是,在非GUI模块中,我们通常使用toInt()这样的一系列to...()函数,如toString()等。
如果你觉得QVariant提供的存储数据类型太少,也可以自定义QVariant的存储类型。被QVariant存储的数据类型需要有一个默认的构造函数和一个拷贝构造函数。为了实现这个功能,首先必须使用Q_DECLARE_METATYPE()宏。通常会将这个宏放在类的声明所在头文件的下面:
Q_DECLARE_METATYPE(BusinessCard)
然后我们就可以使用:
BusinessCardbusinessCard;
QVariant variant =QVariant::fromValue(businessCard);
// ...
if(variant.canConvert<BusinessCard>()){
}
由于VC 6的编译器限制,这些模板函数不能使用,如果你使用这个编译器,需要使用qVariantFromValue(),qVariantValue()和qVariantCanConvert()这三个宏。
如果自定义数据类型重写了<<和>>运算符,那么就可以直接在QDataStream中使用。不过首先需要使用qRegisterMetaTypeStreamO- QVariant
- QVariant
- QVariant
- QVariant
- QVariant
- QVariant
- QT QVariant
- QVariant实质
- QVariant类
- QVariant类
- QVariant类
- QVariant类
- QVariant类
- QVariant类
- Qt--QVariant
- QVariant,QMap<QString,QVariant>的使用方法
- QByteArray和 QVariant--51
- QByteArray和QVariant
- 私有静态成员变量
- checkstyle配置详解
- 各版本ArcGISServer安装环境【二】
- 使用CocoaPods来做iOS程序的包依赖管理
- 编程面试的10大算法概念汇总
- QVariant
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- LINUX总结第2篇:添加用户到sudoer列表中(转载)
- 使用Storm实现实时大数据分析
- 递归转非递归学习三:汉诺塔问题
- HTML中小meta的大作用
- GET和POST区别和用法;ContentType
- DOS下java,jar等命令的输出结果乱码的问题
- 《系统程序员成长计划》读书笔记@变参函数实现原理测试用例