如图,想要封装一个自定义类到qvariant里
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){}