无法在QList中添加我的类
Cannot add my class in the QList
我有一个从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子类(director或间接),不应该给它一个复制构造函数或赋值操作人员
无复制构造函数或分配运算符
QObject既没有复制构造函数,也没有赋值运算符。这是经过设计的。事实上,它们是公开的,但在私下里部分中使用宏Q_DISABLE_COPY()。事实上,所有Qt类从QObject派生(直接或间接)使用此宏声明他们的复制构造函数和赋值运算符是私有的。
不要复制基于QObject的类。使用指针:
QList<Client*> mClients;
Client* cln = new Client( socket );
mClients << cln;
....
或者您可以使用智能指针
我想你应该为你的Client
类定义copy constructor
,因为有正当的原因它被删除了,看起来QList
想要它。
相关文章:
- 为什么如果我添加这一行,我的程序会不断询问值
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 为什么我的双变量通过添加 c++ 显示 nan?
- UE4 - Visual Studio在我从编辑器添加新的c ++文件后无法打开任何源文件 - UBT_COMPILED
- 为什么添加析构函数(甚至是空的)会破坏我的结构,该结构使用 ref 转发和折叠来保存 ref 或值的副本?
- 如何将外部 dll 添加到我的 VS2019 项目?
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- 如何确保我的节点被添加到链接列表中
- 我应该在服务模板中的什么位置添加自己的代码?
- 在我的 CLR 项目中添加包含会导致无法在启用 /clr 的情况下编译 WLR
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 如何使用 Xcode 8.2.1 在我的项目中添加 cpprestsdk 库
- 该函数不会向我的 bst 树添加任何内容
- 是否可以将 VBA 编程环境添加到我的C++应用程序?
- 尝试使用帖子将数据添加到我的MySQL数据库中
- 如何将选项卡添加到我的选项卡控件(WIN32 API C++ GUI)
- 无法在QList中添加我的类
- 在c++中添加我的DLL到Visual Studio项目中