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