-1

我有两个类名“mamad”和“student”,它们都继承自我的类“Base”,而“Base”继承自 QObject

在学生班中,我有一个字段:“主题”,它是一个 mamad,我有一个函数(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

听起来QObjects 默认情况下不应该被复制。也许您最好编写一个copy函数,该函数仅将您需要的参数从复制newsubjectsubject

编辑:这篇文章(可能重复)解释更多,并说你只打算存储和复制指向QObjects 的指针,而不是对象本身。

例如 - 非常基本并使用原始指针。推荐使用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 回答
1

QObject无法复制,因为它在文档和错误消息中明确说明。

您将不得不使用setsubject克隆方法,即通过手动复制mamads 之间的字段来复制状态。

于 2012-12-13T08:32:36.043 回答