如何避免在调用QVariant::toMap()时创建副本



我将QVariantMap作为QVariant存储在另一个QVariant中。我需要在slot函数中的这个嵌套QVariantMap中添加文件。以下是我目前所拥有的:-

QVariantMap map = data["nestedMap"].toMap(); //first copy 
map[newfield] = assingCoolStuff(); //add new filed to nestedMap
data["nestedMap"] = map; // second copy ?

如果我是正确的,那么它会两次创建nestedMap的副本,并且运行速度会很慢。有什么方法可以优化它吗?

template<class T>
T* cast(QVariant& variant)
{
if (variant.userType() == qMetaTypeId<T>())
return reinterpret_cast<T*>(variant.data());
return 0;
}
QVariantMap &map = *cast<QVariantMap>(data["nestedMap"]);
map[newfield] = assingCoolStuff();

如果data["nestedMap"]可能不包含QVariantMap,则需要更改代码。

相关内容

  • 没有找到相关文章

最新更新