我可以为QObject的子类复制构造函数吗?

VAL*_*OD9 4 c++ qt copy-constructor moc copy-assignment

在这里,我们可以读到没有复制构造和复制赋值运算符可评估.但是在这里我们可以阅读它,qRegisterMetaType并且Q_DECLARE_METATYPE必须有公共默认构造函数,公共复制构造函数和公共析构函数.问题是:谁说谎?或者我没有正确理解它?

Eze*_*zee 5

一切都是真的:
1.QObject无法复制,所有后代也无法复制.
2. Q_DECLARE_METATYPE接受具有公共构造函数,复制构造函数和析构函数的对象.

没有矛盾,因为你不能注册QObject后代Q_DECLARE_METATYPE.

编辑:

当您将类转换为QVariant它时,使用复制构造函数来制作对象的副本:

 void *ptr = QMetaType::construct(x->type, copy);
Run Code Online (Sandbox Code Playgroud)

  • 是的,要存储在`QVariant`中,你的类必须有一个复制构造函数,但它不是"像QObject一样工作",因为QObject,QWidget ......不能存储在`QVariant`中 (3认同)