将复制构造函数设置为默认值在继承自 QObject 时不起作用

Set copy constructor as default does not work when inherited from QObject

本文关键字:继承 QObject 不起作用 默认值 复制 构造函数 设置      更新时间:2023-10-16

>我试图将复制构造函数设置为默认值,但编译器警报为"...试图引用已删除的函数"。我的代码有什么问题?

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;
...
};

QObject 类描述页面显示以下内容:

QObject既没有复制构造函数,也没有赋值运算符。 这是设计使然。实际上,它们是声明的,但是在私人中 部分包含宏 Q_DISABLE_COPY((。事实上,所有Qt类 派生自 QObject(直接或间接( 使用此宏声明 它们的复制构造函数和赋值运算符是私有的。这 推理可以在Qt上关于身份与价值的讨论中找到 "对象模型"页。这意味着您不应该复制 QT 对象, 因为QObject在设计上是不可复制的。

这意味着QObject不能复制,它的所有后代也不能复制。

您可以将您的类转换为使用复制 ctor 的类QVariant

void *ptr = QMetaType::construct(x->type, copy);