Javascript 如何在Qt中创建多级QVariantMap?

Javascript 如何在Qt中创建多级QVariantMap?,javascript,c++,qt,qtwebkit,Javascript,C++,Qt,Qtwebkit,我试图创建一个多级QVariantMap,作为Javascript对象从QtWebKit访问 因此,我的目标是填写并访问以下地图: QMap<QString, QMap<QString, QMap<QString, QMap<QString, QList<QString> > > > > map; 例如,我可以在Javascript访问中: var filepath = obj[date][partType][status][part

我试图创建一个多级QVariantMap,作为Javascript对象从QtWebKit访问

因此,我的目标是填写并访问以下地图:

QMap<QString, QMap<QString, QMap<QString, QMap<QString, QList<QString> > > > > map;
例如,我可以在Javascript访问中:

var filepath = obj[date][partType][status][part][0];
我尝试过很多方法,但都没有成功。
我愿意接受不同方法的建议,但我只需要使用Qt框架。

我已经通过使用指向对象的数据指针解决了我的问题。 它真的很有用

QVariantMap map;
boost::filesystem::path path(folder.toStdString());
boost::filesystem::recursive_directory_iterator dir(path), end;
while(dir != end)
{
    //std::cout << dir->path().extension().string() << std::endl;
    if(dir->path().extension().string() == ".png")
    {
        //Filepath example: 2017-05-10/60031/ok/20170508_155510910_-1_0.png
        QString date(dir->path().parent_path().parent_path().parent_path().filename().string().c_str());
        QString partType(dir->path().parent_path().parent_path().filename().string().c_str());
        QString status(dir->path().parent_path().filename().string().c_str());
        QString filename(dir->path().filename().string().c_str());
        QString filenameStem(dir->path().filename().stem().string().c_str());
        QStringList tokens = filenameStem.split('_');
        QString filepath(dir->path().string().c_str());

        QString part(tokens[0] + QString("_") + tokens[1] + QString("_") + tokens[2]);

        if(map[date].isNull())
        {   
            map[date] = QVariantMap();
        }
        QVariantMap* dateMap = (QVariantMap*)(map[date].data());
        if((*dateMap)[partType].isNull())
        {   
            (*dateMap)[partType] = QVariantMap();
        }
        QVariantMap* partTypeMap = (QVariantMap*)((*dateMap)[partType].data());
        if((*partTypeMap)[status].isNull())
        {   
            (*partTypeMap)[status] = QVariantMap();
        }
        QVariantMap* statusMap = (QVariantMap*)((*partTypeMap)[status].data());
        if((*statusMap)[status].isNull())
        {   
            (*statusMap)[part] = QList<QVariant>();
        }
        QList<QVariant>* partFiles = (QList<QVariant>*)((*statusMap)[part].data());
        (*partFiles).append(filepath);
    }
    ++dir;
}
return map;
QVariantMap地图;
boost::filesystem::path(folder.toStdString());
boost::filesystem::recursive\u directory\u iterator dir(path),end;
while(dir!=end)
{
//std::cout path().extension().string()path().extension().string()==“.png”)
{
//文件路径示例:2017-05-10/60031/ok/20170508_155510910_-1_0.png
QString日期(dir->path().parent_path().parent_path().parent_path().filename().string().c_str());
QString部件类型(dir->path().parent_path().parent_path().filename().string().c_str());
QString状态(dir->path().parent_path().filename().string().c_str());
QString文件名(dir->path().filename().string().c_str());
QString文件名项(dir->path().filename().stem().string().c_str());
QStringList tokens=filenameStem.split(“”“);
QString文件路径(dir->path().string().c_str());
QString部分(令牌[0]+QString(“”)+令牌[1]+QString(“”)+令牌[2]);
如果(映射[date].isNull())
{   
映射[日期]=QVariantMap();
}
QVariantMap*日期映射=(QVariantMap*)(映射[date].data());
如果((*dateMap)[partType].isNull())
{   
(*dateMap)[partType]=QVariantMap();
}
QVariantMap*partTypeMap=(QVariantMap*)((*dateMap)[partType].data());
如果((*partTypeMap)[status].isNull())
{   
(*partTypeMap)[状态]=QVariantMap();
}
QVariantMap*statusMap=(QVariantMap*)((*partTypeMap)[status].data());
if((*statusMap)[status].isNull()
{   
(*statusMap)[part]=QList();
}
QList*partFiles=(QList*)((*statusMap)[part].data());
(*partFiles).append(文件路径);
}
++迪尔;
}
返回图;
QVariantMap map;
boost::filesystem::path path(folder.toStdString());
boost::filesystem::recursive_directory_iterator dir(path), end;
while(dir != end)
{
    //std::cout << dir->path().extension().string() << std::endl;
    if(dir->path().extension().string() == ".png")
    {
        //Filepath example: 2017-05-10/60031/ok/20170508_155510910_-1_0.png
        QString date(dir->path().parent_path().parent_path().parent_path().filename().string().c_str());
        QString partType(dir->path().parent_path().parent_path().filename().string().c_str());
        QString status(dir->path().parent_path().filename().string().c_str());
        QString filename(dir->path().filename().string().c_str());
        QString filenameStem(dir->path().filename().stem().string().c_str());
        QStringList tokens = filenameStem.split('_');
        QString filepath(dir->path().string().c_str());

        QString part(tokens[0] + QString("_") + tokens[1] + QString("_") + tokens[2]);

        if(map[date].isNull())
        {   
            map[date] = QVariantMap();
        }
        QVariantMap* dateMap = (QVariantMap*)(map[date].data());
        if((*dateMap)[partType].isNull())
        {   
            (*dateMap)[partType] = QVariantMap();
        }
        QVariantMap* partTypeMap = (QVariantMap*)((*dateMap)[partType].data());
        if((*partTypeMap)[status].isNull())
        {   
            (*partTypeMap)[status] = QVariantMap();
        }
        QVariantMap* statusMap = (QVariantMap*)((*partTypeMap)[status].data());
        if((*statusMap)[status].isNull())
        {   
            (*statusMap)[part] = QList<QVariant>();
        }
        QList<QVariant>* partFiles = (QList<QVariant>*)((*statusMap)[part].data());
        (*partFiles).append(filepath);
    }
    ++dir;
}
return map;