我有从QObject传递的自定义类:
class Client : public QObject { Q_OBJECT friend class Server; public: Client(QTcpSocket *socket, QObject *parent = 0); private: QTcpSocket *mSocket; };
并尝试将其添加到我的列表中(QList)
auto socket = mServer->nextPendingConnection(); Client client(socket); mClients.append(client);
它输出下一个:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:521:'void QList :: append(const T&)[with T = Client]'
...
/ usr/include/x86_64- linux-gnu/qt5/QtCore/qlist.h:372:错误:使用已删除的函数'Client :: Client(const Client&)'if(QTypeInfo :: isLarge || QTypeInfo :: isStatic)n-> v = new T (T);
如何才能正确添加列表中的对象?
QObject具有私有拷贝构造函数和赋值运算符.您应该存储智能指针列表,而不是对象.
您不应该为类派生复制构造函数,它是派生自的QObject
.
不应将QObject的子类实例视为可以复制或分配的值,而应将其视为唯一标识.这意味着当您创建自己的QObject子类(director或indirect)时,不应该给它一个复制构造函数或赋值运算符.
没有复制构造函数或赋值运算符
QObject既没有复制构造函数也没有赋值运算符.这是设计的.实际上,它们是声明的,但是在具有宏Q_DISABLE_COPY()的私有部分中.实际上,从QObject(直接或间接)派生的所有Qt类都使用此宏来声明其复制构造函数和赋值运算符是私有的.