重载qt属性

时间:2012-09-23 18:05:26

标签: qt properties metaobject

我有一个自定义类型的属性。

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与这些类型兼容?

1 个答案:

答案 0 :(得分:2)

阅读The Property System

非常有用

特别是属性和自定义类型部分。

如果要简短,所有属性都保存为QVariant 您需要使用Q_DECLARE_METATYPE宏来使自定义类型与Qt属性兼容 之后,您必须调用qRegisterMetaType函数来注册您的类型。