2012-06-24 28 views
1

我有兩個類,TestATestBTestA延伸QObject。我建立了幾個Q_PROPERTY就是這樣。使用自定義類作爲Q_PROPERTY

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

而且,當然,我創建了適當的getter和setter。這個課程工作得很好。

在我的第二課,TestB,我想創建一個Q_PROPERTY這是一個TestA,所以我在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操作有關。它導致引用的QT函數期望testa是TestA類型的對象,它由函數getTestA返回。但是,getTestA會返回一個指向TestA類型對象的指針。

我想你可以通過改變getTestA的原型 TestA getTestA();

,並聲明它,如下所示解決問題: TestA TestB::getTestA() {return mTestA;}

+4

你可以添加到你的答案是,如果一個人想返回類型爲TestA,還可以將屬性的類型更改爲指針類型:'Q_PROPERTY(TestA * testa READ getTestA)' – leemes

+0

使用@lemes建議,我的編譯錯誤消失了。我可以發誓我已經試過了。 :} –