我有一个自定义类型的属性。
class foo : public QObject {
Q_OBJECT
Q_PROPERTY(Custom x READ x WRITE set_x)
public:
void set_x(Custom &x) { /*whatnot*/}
}
QJson有效地调用了以下动态赋值:
((QObject*)&foo_instance)->setProperty("x", QVariant(QString("something-from-json")))
返回false,如Qt:
中所述如果该值与属性的类型不兼容,则不更改该属性,并返回false。
如何将其填充到我的自定义值中?明确定义辅助函数void set_x(QString)
或void set_x(QVariant)
是不可能的,因为属性系统不会意识到这个访问者。
此外,检查类型兼容性在哪里? - 程序控制永远不会到达
int foo::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
元对象编译器生成的函数..
如何使Custom
与这些类型兼容?
答案 0 :(得分:2)
特别是属性和自定义类型部分。
如果要简短,所有属性都保存为QVariant 您需要使用Q_DECLARE_METATYPE宏来使自定义类型与Qt属性兼容 之后,您必须调用qRegisterMetaType函数来注册您的类型。