假设我有这个自定义类
struct Analytics : public QObject
{
Q_OBJECT
public:
int a = 12;
Analytics(const Analytics& a) {
}
Analytics(){
}
};
Q_DECLARE_METATYPE(Analytics)
以上工作正常。但是我必须提供自己的复制构造函数。 我使用默认生成的复制构造函数尝试了这个,但是我得到了错误
struct Analytics:public QObject { Q_OBJECT
public:
int a = 12;
Analytics(const Analytics& a) = default;
Analytics(){
}
};
Q_DECLARE_METATYPE(Analytics)
这是我得到的错误
5: error: call to implicitly-deleted copy constructor of 'Analytics'
return new (where) T(*static_cast<const T*>(t));
是否可以将Q_DECLARE_METATYPE与默认生成的复制构造函数一起使用。
答案 0 :(得分:0)
来自文档:
QObject既没有复制构造函数也没有赋值运算符。 这是设计的。实际上,他们被宣布,但在私人 带有宏Q_DISABLE_COPY()的部分。实际上,所有的Qt类 派生自QObject(直接或间接)使用此宏来声明 他们的复制构造函数和赋值运算符是私有的。该 关于Qt上的身份与价值的讨论中可以找到推理 对象模型页面。
因此,您无法复制从QObject派生的QObject和类。如果要使用QObjects的信号和插槽机制,请改用指针。