2

私は2つのクラスを持っていTestAますTestB. TestA伸びQObjectます。私はそれをいくつかのようにセットアップしましたQ_PROPERTY

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

もちろん、適切なゲッターとセッターも作成しました。このクラスは問題なく動作します。

2 番目のクラスでTestB、 を作成したいのでQ_PROPERTYTestAでこれを行いました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&)

誰かがこれを修正するために何をする必要があるか教えてもらえますか?

4

1 に答える 1

2

エラーは READ 操作に関連していると思います。これにより、参照されている QT 関数が testa が関数 getTestA によって返される型 TestA のオブジェクトであることを予期するようになります。ただし、getTestA は代わりに TestA 型のオブジェクトへのポインターを返します。

getTestA のプロトタイプを TestA getTestA();

次のように宣言します。 TestA TestB::getTestA() {return mTestA;}

于 2012-06-24T02:21:27.893 に答える