QVariant只接受QList而不接受QVector或QLinkedList是有原因的

问题描述

| QVariant似乎接受
QList<QVariant>
,而不接受
QVector<QVariant>
QLinkedList<QVariant>
。仅仅是因为它认为
QList
QVector
QLinkedList
是基本相似的(抽象意义上的)数据结构吗? 我在and7上加了
std::vector
。如果仅使用Qt API而不是手动转换,则需要进行两次转换: 从
std::vector
QVector
QVector
QList
PS:我知道我可以直接将
std::vector
加到
QVariant
,但我相信在那种情况下,它不会知道它是对象的向量。     

解决方法

        仅仅因为QList是迄今为止最常用的容器类型,并且为所有其他容器添加重载将使QVariant接口变得比现在更加复杂。无论如何,您的问题似乎不是QVariant不支持QVector(它做了一点工作),而是QJson不支持。我怀疑对QVector :: toList()的额外调用是否会导致大量的性能开销。     ,        您可以在调用qRegisterMetaType函数之后将所有内容存储在QVariant中。 因此,如果您呼叫
qRegisterMetaType<std::vector<SomeObject> >(\"std::vector<SomeObject>\");
QVariant将存储std :: vector。 从执行功能
T QVariant::value () const
读取这些值,写入功能writing16ѭ   PS:我知道我可以使用它直接将std :: vector添加到QVariant,但我相信在那种情况下,它不会知道它是对象的向量。 当您将类型注册到QVariant时,它会调用它的默认构造函数,并在处理该类型的项目时复制构造函数和析构函数。因此,将其与类和对象一起使用不会有任何危害。     ,        对于这样的模板化类,您必须分别向元系统注册每个特定的实例。显然,巨魔觉得有必要使用“ 0”,但没有其他使用,因此他们只注册了一个。没有特定的原因可以自行注册。     ,        我不确定QVariant的实现,但我相信QVariant的大小要到运行时才能确定。这意味着,如果您尝试编写QVector ,则编译器不知道要分配多少空间,因此它将报告错误。 LinkedList也是如此。 QList之所以起作用,是因为它的实现严格依赖于指针。 我敢打赌,您会发现QVector 编译得很好。 大警告:我不是Qt专家,所以我可能对此不满意。但是希望至少可以使您朝正确的方向思考。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...