有没有理由说QVariant只接受QList而不接受QVector和QLinkedList

Ala*_*ing 7 c++ qt stl vector qvariant

QVariant似乎接受QList<QVariant>而不是QVector<QVariant>也不接受QLinkedList<QVariant>.它只是因为它看到了QList,QVector并且QLinkedList从根本上类似(在抽象意义上)数据结构?

我加入,并std::vectorQVariant.如果仅使用Qt API而非手动转换,则需要两次转换:

  1. std::vectorQVector
  2. QVectorQList

PS:我知道,我可以添加std::vectorQVariant直接与,但我认为在这种情况下它不会知道它的对象的向量.

Rai*_*aiv 12

在调用qRegisterMetaType函数后,您可以将所有内容存储在QVariant中.

所以如果你调用qRegisterMetaType<std::vector<SomeObject> >("std::vector<SomeObject>");QVariant WOULD存储std :: vector.从它执行函数读取这些值T QVariant::value () const,用于编写使用函数void QVariant::setValue ( const T & value )

PS:我知道我可以直接将std :: vector添加到QVariant,但我相信在这种情况下它不会知道它是一个对象的向量.

当您向QVariant注册类型时,它会在操作该类型的项目时调用它的默认构造函数,复制构造函数和析构函数.因此,将它与类和对象一起使用没有任何害处.


Dan*_*urn 6

仅仅因为QList是迄今为止最常用的容器类型,并且为所有其他容器类型添加重载会使QVariant接口比现在更加复杂.在任何情况下,你的问题似乎不是QVariant不支持QVector(它做了一点工作)但QJson没有.我怀疑对QVector :: toList()的额外调用会导致显着的性能开销.