我有两个班级名称“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函数也有这个问题,我不知道如何修复它。
请,请帮助我答案 0 :(得分:1)
听起来QObject
默认情况下不会被复制。也许您最好编写一个copy
函数,该函数可以准确地将您需要的参数从newsubject
复制到subject
编辑:This post(可能重复)表示更多,并表示您只想存储和复制指向QObject
的指针,而不是对象本身。
例如 - 非常基本和使用原始指针。建议根据要求使用std::unique_ptr
或std::shared_ptr
class student : public Base
{
...
void setsubject( mamad* newsubject) {subject=newsubject; }
...
mamad* subject;
};
stud.setsubject(&mamadObj);
答案 1 :(得分:1)
QObject
可以不复制,因为它在docs和错误消息中已经清楚地说明了。
您必须使用setsubject
作为克隆方法,即通过手动复制mamad
之间的字段来复制状态。