2012-06-24 3 views
1

나는 두 클래스, TestATestB을 가지고 있습니다. TestAQObject까지 확장됩니다. 나는 그것을 몇 가지로 설정했다. Q_PROPERTY 이렇게.맞춤 클래스를 Q_PROPERTY로 사용

Q_PROPERTY(QString a_string READ getString WRITE setString) 
Q_PROPERTY(int a_int READ getInt WRITE setInt) 

그리고 물론 적절한 게터와 세터를 만들었습니다. 이 클래스는 잘 작동합니다.

내 두 번째 클래스에서 TestBTestAQ_PROPERTY을 만들고 싶습니다. 따라서 testb.h에서이 작업을 수행했습니다.

Q_PROPERTY(TestA testa READ getTestA) 
public: 
TestA *getTestA(); 
private: 
TestA mTestA; 

그리고 이것은 testb.cpp입니다.

TestA *TestB::getTestA() {return &mTestA;} 

컴파일하려고하면 다음과 같은 오류 메시지가 나타납니다.

moc_testb.cpp: In member function 'virtual int TestB::qt_metacall(QMetaObject::Call, int, void**)': 
moc_testb.cpp:75: error: no match for 'operator=' in '*(TestA*)_v = TestB::getTestA()' 
../qttest/testa.h:7: note: candidates are: TestA& TestA::operator=(const TestA&) 

누군가이 문제를 해결하기 위해 내가해야 할 일을 말해 줄 수 있습니까?

답변

1

오류는 READ 작업과 관련이 있다고 생각합니다. testa가 getTestA 함수에 의해 반환되는 TestA 유형의 객체가 될 것으로 기대하는 QT 함수를 발생시킵니다. 그러나 getTestA는 대신 TestA 유형의 객체에 대한 포인터를 반환합니다.

난 당신이 TestA getTestA();

에 getTestA의 프로토 타입을 변경하고 다음과 같이 선언함으로써 문제를 해결할 수 있다고 생각 : TestA TestB::getTestA() {return mTestA;}

당신은 하나가 원할 경우 반환 형식이 될 것을 당신의 대답에 추가 할 수
+4

TestA, 하나는 또한 포인터 유형에 대한 속성의 유형을 변경할 수 있습니다 :'Q_PROPERTY (TestA * testa READ getTestA)' – leemes

+0

@leemes 제안으로 컴파일 오류가 사라졌습니다. 나는 그것을 시도했다는 것을 맹세 할 수 있었다. :} –

관련 문제