у меня есть два имени класса «mamad» и «student», и оба они унаследованы от моего класса «Base», а «Base» унаследованы от QObject
в студенческом классе у меня есть поле: «предмет», что мама
и у меня есть функция (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, и я не знаю, как ее исправить.
пожалуйста, пожалуйста, помогите мне
Это звучит как QObject
s не предназначены для копирования по умолчанию. Возможно, вам лучше написать copy
функция, которая копирует именно то, какие параметры вам нужны newsubject
в subject
Редактировать: Эта почта (возможно, дубликат) расширяется и говорит, что вы должны хранить и копировать только указатели QObject
а не сами объекты.
например, очень простой и с использованием сырых указателей. Рекомендуется использовать std::unique_ptr
или же std::shared_ptr
по требованию
class student : public Base
{
...
void setsubject( mamad* newsubject) {subject=newsubject; }
...
mamad* subject;
};
stud.setsubject(&mamadObj);
QObject
Можно не скопировать, как ясно сказано в документы и в сообщении об ошибке.
Вам придется использовать setsubject
как метод клонирования, т. е. дублировать состояние, вручную копируя поля между mamad
s.