2017-05-16 3 views
0

Ich versuche, eine QVariantMap mit mehreren Ebenen zu erstellen, auf die von QtWebKit als Javascript-Objekt zugegriffen werden kann.Wie erstellt man eine QVariantMap auf mehreren Ebenen in Qt?

Also mein Ziel ist es, eine Karte wie die unten zu füllen und Zugang:

QMap<QString, QMap<QString, QMap<QString, QMap<QString, QList<QString> > > > > map; 

Meine Notwendigkeit, ein JSON-Objekt wie diese zu haben ist:

{ 
"2017-05-11": { 
    "60031": { 
    "ok": { 
    "12345": ["/tmp/img01.png", "/tmp/img02.png"] 
    } 
    } 
} 
} 

So konnte ich zum Beispiel, in Javascript-Zugang:

var filepath = obj[date][partType][status][part][0]; 

Ich habe viele Ansätze versucht, aber keinen Erfolg. Ich akzeptiere Vorschläge für verschiedene Ansätze, aber ich muss nur Qt-Framework verwenden.

Antwort

0

Ich habe es geschafft, mein Problem zu lösen, indem ich Datenzeiger auf meine Objekte verwende. Es ist wirklich nützlich.

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; 
Verwandte Themen