2013-06-08 3 views
0

Qt에 대해 몇 가지 실험을하고 있습니다. 부모 클래스에서 자식 클래스의 Q_PROPERTY로 주석 된 모든 속성을 읽으려고합니다. 수업 내용은 다음과 같습니다.어떻게 부모 클래스가 그 자식 클래스의 속성을 볼 수 있습니까?

class ParentClass : public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(ParentProperty...) 
    //class stuff... 
} 

class ChildClass : public ParentClass 
{ 
    Q_OBJECT 
    Q_PROPERTY(ChildProperty...) 
    //class stuff 
} 

부모 클래스의 모든 속성을 읽고 싶지만 부모 속성 만 읽을 수 있습니다. 어떻게 하위 클래스의 속성을 가져올 수 있습니까? 그것을위한 편안한 방법이 있습니까?

+0

왜 필요하다고 생각하십니까? 부모 클래스는 하위 클래스에 대해 결코 알지 못하므로 클래스 디자인에 문제가 있다고 말할 수 있습니다. –

+0

내 의도는 사용하기 쉬운 데이터베이스 입출력 시스템을 만드는 것이 었습니다. 따라서 사용자는 자신이 소유 한 클래스에 데이터베이스에 영구적으로 저장하려는 속성 (속성)을 정의해야합니다. 속성은 속성이 이미 정의 된 상위 클래스에서 상속됩니다. 부모 클래스는 자식의 모든 속성을 읽고 모든 속성을 가진 테이블을 특성으로 만들어야합니다. 나는 그것을 분리 할 수 ​​있지만 사용자는 자신의 속성 클래스를 자신의 것으로 등록해야합니다. – Paul

+0

사용자가 하위 클래스의 속성을 데이터베이스에 저장하지 않으려면 어떻게해야합니까? 또는 기본 클래스가 하위 클래스의 속성에 액세스한다는 사실조차 모르는 경우에는 어떻게해야합니까? 기본 클래스에 템플릿 메소드를 생성 한 다음 서브 클래스에서 호출해야합니다 :'registerProperty ("height", & m_height); 또는 프로그램이 작동하는 방식에 따라 유사합니다. 하지만 기본 규칙은 다음과 같습니다. ** 결코 ** 기본 클래스에서 하위 클래스에 액세스하십시오. 예외 없음. –

답변

0

일반적으로 상위 클래스의 하위 클래스는 참조하면 안됩니다. 클래스 상속의 개념을 깨뜨린 것입니다.

이렇게해야 할 경우 개체 포인터를 ChildClass* 형식으로 변환 한 다음 해당 속성을 사용해야합니다.

void ParentClass::needToGoDeeper() { 
    ChildClass* obj = qobject_cast<ChildClass*>(this); 
    if (obj) { 
    int count = obj->metaObject()->propertyCount(); 
    //... 
    } 
} 
+0

자식 클래스 파일을 포함하지 않고'ChildClass *'를 생성하여 include 루프를 만드는 방법은 무엇입니까? –

+0

'ParentClass.h'가 아닌 'ParentClass.cpp'의 맨 위에 'ChildClass.h'를 포함하면 포함 루프가 없습니다. –

+0

오, 바보 같은 날. 그래도이 일을 할 수있는 조언을 해 줄 수는 없습니다. –

관련 문제