如何在Qt中创建多级QVariantMap
How to create a multiple level QVariantMap in Qt?
我正在尝试创建一个多级QVariantMap,以便作为Javascript对象从QtWebKit访问。
所以我的目标是填充和访问如下所示的地图:
QMap<QString, QMap<QString, QMap<QString, QMap<QString, QList<QString> > > > > map;
我需要有一个这样的 Json 对象:
{
"2017-05-11": {
"60031": {
"ok": {
"12345": ["/tmp/img01.png", "/tmp/img02.png"]
}
}
}
}
因此,例如,我可以在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;
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在Qt中创建多级QVariantMap
- 您是否将创建一个私有类成员来消除多级函数调用
- C++中的多级哈希/字典创建