将默认生成的复制构造函数与Q_DECLARE_METATYPE一起使用
Using default generated copy constructor with Q_DECLARE_METATYPE
假设我有这个自定义类
struct Analytics : public QObject
{
Q_OBJECT
public:
int a = 12;
Analytics(const Analytics& a) {
}
Analytics(){
}
};
Q_DECLARE_METATYPE(Analytics)
以上工作正常。但是我必须提供自己的复制构造函数。我使用默认生成的复制构建器尝试了此操作,但是出现错误
结构分析:公共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与默认生成的复制构造函数一起使用。
来自文档:
QObject既没有复制构造函数,也没有赋值运算符。 这是设计使然。实际上,它们是声明的,但是在私人中 部分包含宏 Q_DISABLE_COPY()。事实上,所有Qt类 派生自 QObject(直接或间接) 使用此宏声明 它们的复制构造函数和赋值运算符是私有的。这 推理可以在Qt上关于身份与价值的讨论中找到 "对象模型"页。
因此,您无法复制 QObject 和从 QObject 派生的类。如果要将信号和插槽机制与 QObjects 一起使用,请改用指针。
相关文章:
- 编译器是否实际使用我的"omp declare simd"函数?
- #define 的"Declaration does not declare anything"错误
- typedef 中的自定义类型为 Qt MetaType
- Declare a cv::Mat of NaN
- 函数上漆"was not declare in this scope"
- 如何"declare"全局结构?
- C++ - "Cannot declare parameter 'anonymous' to be of abstract type"
- "declaration does not declare anything"错误的原因是什么?
- "Declaration does not declare anything"和"expected unqualified-id"
- "You can't forward declare classes that overload operator&" ?