QVariant类 万能数据类型

QVariant 万能数据类型为各种数据类型之间的转换提供了可能。
使C++的强数据类型可能成为了弱数据类型。
Qt下的QVariant只支持已注册的数据类型,可以将自定义的类等注册,使得QVariant可以识别自定义的类。

myStructor c;
QVariant v;
v.setValue (c);    //将会错误--Qvariant还不认识myStructor呢。

Q_DECLARE_METATYPE(myStructor)。使用Q_DECLARE_METATYPE在 **全局中** 注册

 v.value < myStructor >(); 取值方法
例子:
将一个指针赋予QVariant--可能有需要将一个指针赋予树型列表控件(QTreeWidget)中一个条目--点击此条目获取指针对数据进行处理--而无须通过查找来取得数据--缩短处理时间。

用int指针作为例子--QVariant不支持此类型必须先注册。
ifndef __XXX__
define __XXX__

Q_DECLARE_METATYPE(int*);

endif

附带记下如何在QTreeWidget控件中附加数据

增加Item
QTreeWidgetItem* newItem = new QTreeWidgetItem;

...增加newItem到treeWidget中...

int* itemVal = new int (123);
QVariant Var;
Var.setValue (testVal); // 已注册了int*--正确编译
newItem->setData (0, 0, Var); //newItem的第一列附加了Var--即指向itemVal的指针
                              //第二个参数为role角色的意思--我也不懂啥意思

点击某个条目获取对应的数据
on_treeWidget_click ()
{
    ...取得选择的条目-curItem...
    //Data()的参数和当时设置数据的参数一样,value()是取得var的数据
    int* ptr = curItem->Data (0, 0).value < int* >(); 

    ...对ptr进行处理...
}

转载自 http://blog.chinaunix.net/uid-10554711-id-2948398.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值