分配两个 QObject [关闭]
Posted
技术标签:
【中文标题】分配两个 QObject [关闭]【英文标题】:assignment of two QObject [closed] 【发布时间】:2012-12-13 03:11:49 【问题描述】:我有两个班级名称“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 函数也有这个问题,我不知道如何解决它。?
请帮帮我
【问题讨论】:
【参考方案1】:听起来QObject
s 默认情况下不应该被复制。或许你最好写一个copy
函数,它将你需要的参数从newsubject
复制到subject
编辑:This post(可能重复)解释更多,并表示您只打算存储和复制指向 QObject
s 的指针,而不是对象本身。
例如 - 非常基本并使用原始指针。建议根据需求使用std::unique_ptr
或std::shared_ptr
class student : public Base
...
void setsubject( mamad* newsubject) subject=newsubject;
...
mamad* subject;
;
stud.setsubject(&mamadObj);
【讨论】:
谢谢你的回答,但你能告诉我一个例子(指针)吗?谢谢。 @ErfanTavakoli 我不知道 qt 本身,但我添加了一个基本示例,将它与 pointers 一起使用。【参考方案2】:QObject
可以不被复制,因为它在docs 和错误消息中明确说明。
您必须使用setsubject
作为克隆方法,即通过手动复制mamad
s 之间的字段来复制状态。
【讨论】:
以上是关于分配两个 QObject [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Qml 错误:无法将 QObject* 分配给 QQuickItem
关闭应用程序时多次出现错误“QObject::startTimer: QTimer can only be used with threads started with QThread”