无法在QList中添加我的类

Cannot add my class in the QList

本文关键字:添加 我的 QList      更新时间:2023-10-16

我有一个从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=新T(T);

如何将我的对象正确添加到列表中?

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

您不应该为派生自QObject的类定义复制构造函数。

QObject的子类实例不应被视为值可以复制或分配,但作为唯一标识。这意味着当您创建自己的QObject子类(director或间接),不应该给它一个复制构造函数或赋值操作人员

无复制构造函数或分配运算符

QObject既没有复制构造函数,也没有赋值运算符。这是经过设计的。事实上,它们是公开的,但在私下里部分中使用宏Q_DISABLE_COPY()。事实上,所有Qt类从QObject派生(直接或间接)使用此宏声明他们的复制构造函数和赋值运算符是私有的。

不要复制基于QObject的类。使用指针:

QList<Client*> mClients;
Client* cln = new Client( socket );
mClients << cln;
....

或者您可以使用智能指针

我想你应该为你的Client类定义copy constructor,因为有正当的原因它被删除了,看起来QList想要它。