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

时间:2017-08-16 19:02:50

标签: c++ qt

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

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

1 个答案:

答案 0 :(得分:3)

QObject Class说明页面说明如下:

  

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

这意味着无法复制QObject,也无法复制其所有后代。

<强>但是

您可以将您的班级转换为QVariant使用副本ctor

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