调用QVariant :: toMap时如何避免创建副本?

问题描述

我将QVariantMap作为QVariant存储在另一个QVariant中。我需要在插槽函数的此嵌套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,则需要更改代码。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...