我尝试将复制构造函数设置为默认值,但编译器警报“...尝试引用已删除的函数”。我的代码出了什么问题?
class A : public QObject
{
Q_OBJECT
public:
const QString s1;
...
const QString sn;
const QDateTime t1;
...
const QDateTime tn;
A() = delete;
A(const QString &s1, ...);
A(const A&) = default;
~A() = default;
float fun1();
...
float funn();
private:
QString m_s1;
...
};
答案 0 :(得分:3)
QObject Class说明页面说明如下:
QObject既没有复制构造函数也没有赋值运算符。 这是设计的。实际上,他们被宣布,但在私人 带有宏Q_DISABLE_COPY()的部分。实际上,所有的Qt类 派生自QObject(直接或间接)使用此宏来声明 他们的复制构造函数和赋值运算符是私有的。该 关于Qt上的身份与价值的讨论中可以找到推理 对象模型页面。这意味着你不应该复制QT对象, 因为QObject在设计上是不可复制的。
这意味着无法复制QObject
,也无法复制其所有后代。
<强>但是强>
您可以将您的班级转换为QVariant
使用副本ctor
void *ptr = QMetaType::construct(x->type, copy);