QVariant 封装自定义类型提取失败

如图,想要封装一个自定义类到qvariant里

img

a_1和a_2取值均失败
qt版本为5.7.0

QT+MSVC环境吗?
msvc编译器模式下,QVariant转换失效,你给AAAA类写个toString()函数,把AAAA实列数据转成字符串传递吧。

QVariant是Qt中一种能够存储各种类型数据的类,可以将任何类型的数据转换为QVariant对象,以实现数据的传递和存储。如果你在使用QVariant封装自定义类型时出现了提取失败的问题,可能是以下原因导致的:

  • 忘记注册自定义类型

在使用QVariant封装自定义类型时,需要先将该类型注册到Qt系统中,以便QVariant能够正确地进行类型转换和提取。可以通过调用qRegisterMetaType()函数来完成类型注册,例如:

qRegisterMetaType<MyCustomType>("MyCustomType");

其中,MyCustomType为自定义类型名。

  • 自定义类型没有提供元对象信息

QVariant在提取自定义类型时,需要知道该类型的元对象信息,以便正确地进行类型转换。如果自定义类型没有提供元对象信息,QVariant将无法识别该类型,从而出现提取失败的情况。为了提供元对象信息,可以使用Q_DECLARE_METATYPE宏来声明自定义类型,例如:

class MyCustomType
{
    Q_DECLARE_METATYPE(MyCustomType)
    //...
};

这样,QVariant就能够正确地识别MyCustomType类型了。

  • 自定义类型没有提供默认构造函数

QVariant在提取自定义类型时,需要调用该类型的默认构造函数来创建对象。如果自定义类型没有提供默认构造函数,QVariant将无法创建该类型的对象,从而出现提取失败的情况。因此,如果自定义类型没有提供默认构造函数,需要手动添加一个,例如:

class MyCustomType
{
public:
    MyCustomType() {}
    //...
};

找到问题了,是类的构造函数有问题,必须提供默认参数,不必提供拷贝构造函数。
头文件里这么定义一个构造函数就足够了:
AAAA(int a = 0){}