zoukankan      html  css  js  c++  java
  • QVariant与自定义数据类型转换的方法

     

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

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

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

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

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

        示例代码如下:

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

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

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

    [cpp] view plaincopy
     
    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、读取的时候反过来处理,如下:

    [cpp] view plaincopy
     
    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);  
  • 相关阅读:
    为网站设置自定义404错误页面
    iOS核心动画
    Java 匿名内部类的示例介绍
    理解SimpleExpandableListAdapter的构造函数
    Android 控件之Spinner
    ExpandableListView 和 ExpandableListActivity的使用及数据更新
    Android中 RatingBar评分条的使用
    IHttphandler之Url重写
    DOTA版设计模式——开篇
    IHttphandler之图片水印
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4965801.html
Copyright © 2011-2022 走看看