Qt 在QObject中设置属性不适用于自定义类型。你能告诉我为什么吗?

Qt 在QObject中设置属性不适用于自定义类型。你能告诉我为什么吗?,qt,qobject,qmetatype,Qt,Qobject,Qmetatype,我正在尝试使用自定义类型MoneyTst作为类tst中的属性,该类是qobject。当我在tst实例上调用方法setProperty(amount,8000)时,它没有为属性赋值。你能解释一下为什么不在这个属性上设置它的值吗 //我正在尝试使用QObject.setProperty()设置的自定义类型 使您的结构成为Q_小工具,如下所示: struct MoneyTst{ Q_GADGET MoneyTst(){} ... }; Q_DECLARE_METATY

我正在尝试使用自定义类型MoneyTst作为类tst中的属性,该类是qobject。当我在tst实例上调用方法setProperty(amount,8000)时,它没有为属性赋值。你能解释一下为什么不在这个属性上设置它的值吗

//我正在尝试使用QObject.setProperty()设置的自定义类型


使您的结构成为Q_小工具,如下所示:

struct MoneyTst{
    Q_GADGET
    
    MoneyTst(){}
    ...
};
Q_DECLARE_METATYPE(MoneyTst)

问题在于这两方面:

o.setProperty("amount",8000);
QVERIFY(o.property("amount").toInt() == 8000);
首先,从int和property函数创建一个QVariant,它接受MoneyTst,甚至不调用它。 然后尝试将MoneyTst类型(存储在QVariant中)转换为int,但失败。 基于QVariant的属性系统要求对自定义类型进行显式类型转换

您应该通过以下方式更改代码:

o.setProperty("amount", QVariant::fromValue(MonetTst{8000}));
QVERIFY(o.property("amount").value<MoneyTst>().getValue() == 8000);
o.setProperty(“金额”,QVariant::fromValue(MonetTst{8000}));
QVERIFY(o.property(“amount”).value().getValue()=8000);
o.setProperty("amount", QVariant::fromValue(MonetTst{8000}));
QVERIFY(o.property("amount").value<MoneyTst>().getValue() == 8000);