Q_DECLARE_METATYPE说明

在使用Qt进行应用程序开发时,经常要自定义数据类型,而且在需要的时候还要把这些数据放到QVariant中去。因为QVariant是一个接受绝大部分类型的数据类型。为了达到这个目的,就必须使用Q_DECLARE_METATYPE。

 

下面以一段简单的代码说明Q_DECLARE_METATYPE的用法和注意点。

 

#include <QtGui/QApplication>
#include <QVariant>

struct struct1
{
    int a;
    double b;
};

struct struct2
{
    struct1 s;
    int c;
};

Q_DECLARE_METATYPE(struct1)  //struct1与struct2 谁先谁后,没有影响
Q_DECLARE_METATYPE(struct2)

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    struct1 v1 = {1, 2.0};
    QVariant var1;
    var1.setValue(v1);

    if (var1.canConvert<struct1>())   //判断能否转化为相应类型
    {
        struct1 v11 = var1.value<struct1>();
    }

    struct2 v2 = {{2, 3.0}, 5};
    QVariant var2;

    if (var2.canConvert<struct2>())
    {
        var2.setValue(v2);
        struct2 v22 = var2.value<struct2>();
    }

    return a.exec();
}

通过Q_DECLARE_METATYPE声明后,就可以让自定义的类型设置到QVariant。

(注:关于Q_DECLARE_METATYPE和Q_DECLARE_METATYPE相关,以后还会继续增加。。。

 

posted on 2011-01-19 00:30  ActiveChange  阅读(10577)  评论(0编辑  收藏  举报

导航