'QObject& QObject::operator=(const QObject&)' is private——无法将自定义的QObject子类放入Qt容器(con
Posted foundkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了'QObject& QObject::operator=(const QObject&)' is private——无法将自定义的QObject子类放入Qt容器(con相关的知识,希望对你有一定的参考价值。
先贴出问题的代码:
1 #include<QCoreApplication> 2 classMyObject:publicQObject 3 { 4 public: 5 MyObject(QObject*parent =0): 6 QObject(parent) 7 { 8 } 9 private: 10 int m_id; 11 }; 12 int main(int argc,char*argv[]) 13 { 14 QCoreApplication a(argc, argv); 15 QList<MyObject>list; 16 list<<MyObject(0); 17 return a.exec(); 18 }
QObject has neither a copy constructor nor an assignment operator. This is by design. Actually, they are declared, but in a private section with the macro Q_DISABLE_COPY(). In fact, all Qt classes derived from QObject (direct or indirect) use this macro to declare their copy constructor and assignment operator to be private. The reasoning is found in the discussion on Identity vs Value on the Qt Object Model page.
The main consequence is that you should use pointers to QObject (or to your QObject subclass) where you might otherwise be tempted to use your QObject subclass as a value. For example, without a copy constructor, you can\'t use a subclass of QObject as the value to be stored in one of the container classes. You must store pointers.
简单说就是:
QObject的拷贝构造函数是私有的,当把其子类放入容器时无法完成构造其副本。
解决方法就是,使用指针。将自定义的子类以指针的形式保存在容器中。
QList<MyObject *>list;
以上是关于'QObject& QObject::operator=(const QObject&)' is private——无法将自定义的QObject子类放入Qt容器(con的主要内容,如果未能解决你的问题,请参考以下文章
Qt:将指针传递给 QMimeData 中的 QObject