Gebruik aangepaste klassen als Q_PROPERTY

Ik heb twee klassen, TestA en TestB . TestA breidt QObject uit. Ik heb het zo ingesteld met een paar Q_PROPERTY 's.

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

En natuurlijk heb ik de juiste getters en setters gemaakt. Deze klasse werkt prima.

In mijn tweede klasse, TestB , wil ik een Q_PROPERTY maken die een TestA is, dus ik deed dit in testb.h .

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

En dit in testb.cpp .

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

Wanneer ik probeer om dit te compileren, krijg ik de volgende foutmelding.

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&)

Kan iemand mij vertellen wat ik moet doen om dit op te lossen?

1

1 antwoord

Ik denk dat de fout betrekking heeft op de READ-operatie. Het veroorzaakt dat de QT-functie waarnaar wordt verwezen, verwacht dat testa een object van het type TestA is, dat wordt geretourneerd door de functie getTestA. GetTestA retourneert in plaats daarvan een aanwijzer naar een object van het type TestA.

I think you can resolve the issue by changing the prototype of getTestA to TestA getTestA();

and declaring it as follows: TestA TestB::getTestA() {return mTestA;}

1
toegevoegd
U kunt aan uw antwoord toevoegen dat als u wilt dat het retourneertype TestA is, u ook het type van de eigenschap kunt wijzigen in het aanwijstype: Q_PROPERTY (TestA * testa READ getTestA)
toegevoegd de auteur leemes, de bron
Met de suggestie van @leemes ging mijn compileerfout weg. Ik had gezworen dat ik dat had geprobeerd. :}
toegevoegd de auteur Erik Sandberg, de bron