Q_PROPERTY 的属性名称 必须是确定的,如果需要多态,属性名称写基类的

JsonEntityPtr ts2 = person.property( "testStruct" ).value<JsonEntityPtr>();//属性名称是确定的,


typedef JsonEntity* JsonEntityPtr;


class Person : public JsonEntity
{
  Q_OBJECT

  Q_PROPERTY(JsonEntityPtr  testStruct  READ testClass WRITE setTestClass)


    JsonEntityPtr testClass();
    void setTestClass( JsonEntityPtr ts);
    
protected:

    JsonEntityPtr m_testStruct;

}




Person::Person(QObject* parent)
  : JsonEntity(parent),
    m_testStruct(NULL)
{
    qRegisterMetaType< JsonEntityPtr >("JsonEntityPtr");

    m_testStruct = new TestStruct;
}

//必须有拷贝构造函数
Person::Person( const Person& ts )
{
    this->m_testStruct = ts.m_testStruct;
}

Person::~Person()
{
    if ( m_testStruct )
    {
        delete m_testStruct;
        m_testStruct = 0;
    }
}


JsonEntityPtr Person::testClass()
{
    return m_testStruct;
}

void Person::setTestClass( JsonEntityPtr ts)
{
    if ( m_testStruct )
    {
        delete m_testStruct;
        m_testStruct = new JsonEntity;
    }
    m_testStruct = ts;
}

展开阅读全文

没有更多推荐了,返回首页