gpt4 book ai didi

c++ - QT:使用 QVariant 实现任意复杂的数据结构

转载 作者:行者123 更新时间:2023-11-28 04:23:52 24 4
gpt4 key购买 nike

引用 QT 文档:

You can even store QList and QMap values in a variant, so you can easily construct arbitrarily complex data structures of arbitrary types. This is very powerful and versatile, but may prove less memory and speed efficient than storing specific types in standard data structures.

有没有人知道或有这样做的例子?

我是一名 C++ 程序员,但是 QT Nube,写语义的拷贝让我感到不适。 QVariants 数据结构的映射和列表似乎是不可变的。每次我尝试修改值树时,我都只是修改了一个拷贝。


从我的第一篇文章中得到一些反馈,我应该添加一个示例。在这里:

// Input Data:
//
// { "f1" : "field-1",
// "list" : [ 0, 1, 2, 3, 4 ] }
//

// Convert the data, commented above, into a QVariantMap with two
// values:
// "f1" - a string
// "list" - a QVariantList of integers
QVariant vData = ConvertJsonDocument(document);

// Dump
qWarning( VariantToString(vData).toLocal8Bit() );

// Convert vData to QVariantMap
QVariantMap vMap = vData.value<QVariantMap>();
// Get the list of integers as a QVariantList
QVariantList vList = vMap["list"].value<QVariantList>();
// Change the 0 to a 5
vList[0] = 5;

// Dump
qWarning( VariantToString(vData).toLocal8Bit() );

上面的输出:

{ "f1" : "field-1", "list" : [ 0, 1, 2, 3, 4 ] }
{ "f1" : "field-1", "list" : [ 0, 1, 2, 3, 4 ] }

上面的期望输出:

{ "f1" : "field-1", "list" : [ 0, 1, 2, 3, 4 ] }
{ "f1" : "field-1", "list" : [ 5, 1, 2, 3, 4 ] }

我知道我正在修改拷贝,但对于我的生活,我无法弄清楚如何不这样做。如何编辑原始源数据? (树中的数据以 vData 为根。)

最佳答案

完成所需的更改后,您需要返回树并使用新数据更新变量。

// Convert vData to QVariantMap
QVariantMap vMap = vData.value<QVariantMap>();
// Get the list of integers as a QVariantList
QVariantList vList = vMap["list"].value<QVariantList>();
// Change the 0 to a 5
vList[0] = 5;

// Change the map using insert, which replaces the value
vMap.insert("list", vList);
// Rebuild the QVariant from the QMap
vData = QVariant::fromValue(vMap);
// Dump
qWarning( VariantToString(vData).toLocal8Bit() );

您可以将数据从 QVariant 转换回并从那里更新源文档。

关于c++ - QT:使用 QVariant 实现任意复杂的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54871295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com