分配两个 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】:

听起来QObjects 默认情况下不应该被复制。或许你最好写一个copy 函数,它将你需要的参数从newsubject 复制到subject

编辑:This post(可能重复)解释更多,并表示您只打算存储和复制指向 QObjects 的指针,而不是对象本身。

例如 - 非常基本并使用原始指针。建议根据需求使用std::unique_ptrstd::shared_ptr

class student : public Base

    ...
    void setsubject( mamad* newsubject) subject=newsubject; 
    ...
    mamad* subject;
;

stud.setsubject(&mamadObj);

【讨论】:

谢谢你的回答,但你能告诉我一个例子(指针)吗?谢谢。 @ErfanTavakoli 我不知道 qt 本身,但我添加了一个基本示例,将它与 pointers 一起使用。【参考方案2】:

QObject 可以被复制,因为它在docs 和错误消息中明确说明。

您必须使用setsubject 作为克隆方法,即通过手动复制mamads 之间的字段来复制状态。

【讨论】:

以上是关于分配两个 QObject [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Qml 错误:无法将 QObject* 分配给 QQuickItem

暂时阻塞两个 QObject 之间的信号

关闭应用程序时多次出现错误“QObject::startTimer: QTimer can only be used with threads started with QThread”

QObject 真的有多重? [复制]

从 QList<QObject*> 填充 ComboBox

在 QMap 中插入 QObject * - 无法初始化或传递指针