免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1221 | 回复: 0
打印 上一主题 下一主题

关于Qvariant类--万能的数据类型 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-09 21:45 |只看该作者 |倒序浏览

QVariant识别类型的注册
QVariant为一个万能的数据类型--可以作为许多类型互相之间进行自动转换。将C++变为弱数据类型成为可能--也是许多控件中用户定义数据的类型--因为无法预先知道用户附加到控件的数据是什么类型。
而QT的Variant类型默认识别的类型都非常强制--只支持已注册的类型--如何将一个自己定义的结构或类赋予QVariant对象呢?
myStructor c;
QVariant v;
v.setValue (c); //将会错误--Qvariant还不认识myStructor呢。
首先必须先注册myStructor--使用Q_DECLARE_METATYPE(myStructor)。
这是一个Macro--只能在全局中使用--否则出现错误。
然后就可以按一般的方法来赋值了--取值代码为 v.value ();
例子:
将一个指针赋予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 ();
    ...对ptr进行处理...
}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94311/showart_2066612.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP