Javascript 如何在Qt中创建多级QVariantMap?
我试图创建一个多级QVariantMap,作为Javascript对象从QtWebKit访问 因此,我的目标是填写并访问以下地图: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
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;