gpt4 book ai didi

c++ - 修改 QVariant 中持有的对象的成员变量

转载 作者:行者123 更新时间:2023-11-28 06:43:57 30 4
gpt4 key购买 nike

我有一个包含不同类对象的 QVariantList。我需要修改列表中保存的一个对象的成员变量。我的代码运行了,但对象没有改变(看起来对象的拷贝正在改变)。这是类似于我正在做的示例代码:

QVariantList l;
QVariant v = l.at(0);
MyClass c;
if (v.canConvert<MyClass >()) c = v.value<MyClass >();
c.myfield(10);
// l.at(0) has not changed

我也试过:

qvariant_cast<MyClass>(v).myfield(10)

但没有区别。我想更改对象的 myfield,而不是对象的拷贝。如何修改 QVariant v 中保存的对象的“myfield”字段。

最佳答案

你的对象第一次被复制到这里:

QVariant v = l.at(0);

v包含一个新对象。您的所有操作都会更改此拷贝,而不是列表中的对象。
改成这样:

QVariant& v = l.at(0);

现在您有一个对存储在列表中的正确 QVariant 的引用。

qvariant_cast还创建一个拷贝:

T qvariant_cast ( const QVariant & value )

v.value<MyClass >()也是:

T QVariant::value () const

这就是为什么你需要转换 vMyClass ,更改它并将其分配回 v .这是一种可能的解决方案:

QVariantList l;
QVariant v& = l.at(0);
if (v.canConvert<MyClass >())
{
MyClass c = v.value<MyClass>();
c.myfield(10);
v = QVariant::fromValue(c);
}

除了使用引用你还可以使用 QVariant v = l.at(0);但最后调用l[0] = QVariant::fromValue(c) .

关于c++ - 修改 QVariant 中持有的对象的成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25397124/

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