在使用Qt进行应用程序开发时,经常要自定义数据类型,而且在需要的时候还要把这些数据放到QVariant中去。因为QVariant是一个接受绝大部分类型的数据类型。为了达到这个目的,就必须使用Q_DECLARE_METATYPE。
下面以一段简单的代码说明Q_DECLARE_METATYPE的用法和注意点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <QtGui/QApplication>
#include <QVariant>
struct struct1
{
int a;
double b;
};
struct struct2
{
struct1 s;
int c;
};
Q_DECLARE_METATYPE(struct1)
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相关,以后还会继续增加。。。)