当前位置:  开发笔记 > 编程语言 > 正文

无法在QList中添加我的类

如何解决《无法在QList中添加我的类》经验,为你挑选了1个好方法。

我有从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);

如何才能正确添加列表中的对象?



1> ForEveR..:

QObject具有私有拷贝构造函数和赋值运算符.您应该存储智能指针列表,而不是对象.

您不应该为类派生复制构造函数,它是派生自的QObject.

不应将QObject的子类实例视为可以复制或分配的值,而应将其视为唯一标识.这意味着当您创建自己的QObject子类(director或indirect)时,不应该给它一个复制构造函数或赋值运算符.

没有复制构造函数或赋值运算符

QObject既没有复制构造函数也没有赋值运算符.这是设计的.实际上,它们是声明的,但是在具有宏Q_DISABLE_COPY()的私有部分中.实际上,从QObject(直接或间接)派生​​的所有Qt类都使用此宏来声明其复制构造函数和赋值运算符是私有的.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有