QVariant与自定义数据类型转换的方法

摘要:
在使用VC和Delphi编写用户界面程序时,对象常常绑定到控件的数据字段,便于在程序操作过程中进行读写,以提高效率。然而,如何在Qt编程中实现此功能?Qt提供的在线帮助远远不能令人满意。示例代码太少。经过长时间的调试,本文给了我一个提示。主要步骤如下:1.使用Q作为用户定义的数据类型_声明DECLARE_METATYPE宏以便于编译器识别。
 

     在使用VC、Delphi编写用户界面程序的时候,经常会把对象与控件的data域进行绑定,便于程序运行中读写提高效率。然而在Qt编程中怎么实现这个功能呢?比如将一个用户自定义的结构体与QComboBox控件的data绑定?

    Qt的联机帮助做的实在是差强人意,示例代码太少了。调试了半天,看到这篇文章给了我提示。主要步骤如下:

    1、将自定义数据类型使用Q_DECLARE_METATYPE宏进行声明,便于编译器识别。

    2、在插入对象的时候,声明QVariant对象,使用其setValue方法添加自定义对象。

    3、在读取的时候,采用QVariant对象的value方法返回自定义对象。

    示例代码如下:

    1、自定义结构体及元类型声明:

  1. struct MyStruct  
  2. {  
  3.     int a;  
  4.     char b[10];  
  5. };  
  6. MyStruct stu;  
  7.   
  8. Q_DECLARE_METATYPE(MyStruct)  

2、在程序初始化中,给结构体初始化并存储到QComboBox的data域中:

  1. bzero(&stu, sizeof(MyStruct)); //stu就是上面声明的全局变量  
  2. //赋初值  
  3. stu.a = 100;  
  4. strcpy(stu.b,"Hello./n");  
  5. //类型转换  
  6. QVariant v;  
  7. QString ss = QString("%1").arg(stu.b);  
  8. v.setValue(stu);  
  9. //保存到控件data中  
  10. ui->cboTest->addItem(ss, v);  
  11. ui->cboTest->addItem("aadkjf", 0);  

3、读取的时候反过来处理,如下:

  1. QVariant v;  
  2. //从控件data域取得variant对象  
  3. v = ui->cboTest->itemData(0);  
  4. //转换为自定义的结构体实例  
  5. MyStruct s = v.value<MyStruct>();  
  6. printf("value=%d:%s/n",s.a, s.b);  

免责声明:文章转载自《QVariant与自定义数据类型转换的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇log4net.redis+logstash+kibana+elasticsearch+redis 实现日志系统暴雪HASH算法(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

华为 HG526 破解实录(一)Cfg文件加解密工具

几天前,我去中国电信安装E169软件包,并发送了一个华为HG526无线路由猫和一个中兴xxx网络机顶盒(尚未开始制造麻烦)。当然,无线路由猫一如既往地被阉割了。搜索之后,我开始了我的快攻之旅。1.打开catdrop管理页面,使用telecomadmin和nE7jA%5m登录;2.将U盘插入猫。3.开放式管理=˃设备管理、备份配置。4.打开U盘,放下ctce8...

一起学习Avalonia(十二)

可以使用数据模板自定义和显示数据模板模板。文档中介绍了Avalonia的基本数据模板。PublicstringFirstName{get;set;}publicstringLastName{get;set;}扩展使用文档最后介绍了扩展使用,包括2个模型。Student和Teacher。在MainWindowViewModel中创建属性Content。此属性是...

C#中将字符串转成 Base64 编码(小技巧)

///////////////publicstringToBase64Str(stringStr){byte[]b=System.Text.Encoding.Default.GetBytes(Str);returnConvert.ToBase64String(b);}///...

Windows命令行中cd失效应对方法

管理员模式打开命令行进行操作也不起效从当前目录下跳转到不同分区路径d:\的时候,cdd:\没有成功,当前目录没有发生改变。问题解决方法一添加强制跳转参数“/d”当添加了一个参数/d之后,命令成功地执行了。但是,如果进入的是当前目录的子目录,则可以不使用/d参数。方法二直接输入磁盘名称还有一种方法就是不使用cd命令直接跳转磁盘这里还要注意的一小点是Window...

druid discard long time none received connection问题解析

Druid个人使用摘要:1.从服务器成功接收到的最后一个包有问题。我将jar包升级到1.2.2版本。放弃长时间无接收连接问题。在不更改程序的情况下设置timeBetweenEffectionRunsMillis参数。添加系统。程序Putdruid的getProperties()默认使用usePingMethod方法。此方法不更新连接返回时间,导致lastPa...

[C#]asp.net生成高清晰缩略图

Code//////生成缩略图//////源图路径(物理路径)///缩略图路径(物理路径)///缩略图宽度///缩略图高...