-1

「mamad」と「student」の 2 つのクラス名があり、どちらも「Base」が QObject から継承するクラス「Base」から継承されます

Student Classには、mamadである「subject」というフィールドがあり、newsubjectを取得してnewsubjectをsubjectにコピーする関数(setsubject)があります。

しかし、私はエラーがあります:

"QObject& Qobject::operator=(const QObject)" is private !
"within this context" 

どうすれば修正できますか?

これは私のママクラスです:

class mamad:public Base
{
   Q_OBJECT
   Q_PROPERTY(int id2 READ getId2 WRITE setId2)
   Q_PROPERTY(QString Name2 READ getName2 WRITE setName2)
public:
    mamad(Base* parent=0);
    int getId2() const { return id2; }
    void setId2(int newId) { id2 = newId; }
    QString getName2() const { return Name2; }

    void setName2(const QString &newName) { Name2 = newName; }
private:
    int id2;
    QString Name2;

};

それは私の学生クラスです:

class student : public Base
{
    Q_OBJECT // Q_OBJECT macro will take care of generating proper metaObject for your class
    Q_PROPERTY(int id READ getId WRITE setId)
    Q_PROPERTY(QString Name READ getName WRITE setName)
    Q_PROPERTY(mamad subject  WRITE setsubject)

public:
    student(Base * parent=0);
    int getId() const { return id; }
    void setId(int newId) { id = newId; }
    QString getName() const { return Name; }
    void setName(const QString &newName) { Name = newName; }
   // mamad getsubject()const {return subject;}
    void setsubject( mamad newsubject) {subject=newsubject; }


private:
    int id;
    QString Name;
    mamad subject;
};

getsubject 関数にもこの問題があり、修正方法がわかりません。

お願い、お願い、助けて

4

2 に答える 2

1

QObjectドキュメントやエラーメッセージに明記されているように、コピーすることはできません。

クローンメソッドとして使用する必要があります。setsubjectつまり、の間にフィールドを手動でコピーして状態を複製しますmamad

于 2012-12-13T08:32:36.043 に答える
1

QObjects はデフォルトでコピーされることを意図していないようです。おそらく、copy必要なパラメーターを正確にコピーする関数を作成したほうがよいでしょnewsubjectう。subject

編集:この投稿QObject(重複の可能性あり) はさらに詳しく説明しており、オブジェクト自体ではなく、へのポインターのみを保存およびコピーすることを意図していると述べています。

たとえば、非常に基本的で、生のポインターを使用します。使用が推奨されるstd::unique_ptrstd::shared_ptr、要件に基づく

class student : public Base
{
    ...
    void setsubject( mamad* newsubject) {subject=newsubject; }
    ...
    mamad* subject;
};

stud.setsubject(&mamadObj);
于 2012-12-13T03:30:16.183 に答える