代码之家  ›  专栏  ›  技术社区  ›  Manmeet Sahi

动态获取保存到jsonObject c++源文件中JSON的qml listModel数据

  •  0
  • Manmeet Sahi  · 技术社区  · 7 年前

    将qml列表模型中的数据获取到c++并 将所有内容动态保存到QJsonObject。 需要帮助
    提前感谢。。

    Qt源文件代码:

    void JsonCreator::saveResults(){
        emit resultsDataChanged();
    }
    
    QString JsonCreator::addUniqueSuffix(const QString path, const QString fileName) const
    {
        if (!QFile::exists(path + fileName)) {
            return fileName;
        }
        QFileInfo fileInfo(fileName);
        QString ret;
    
        QString secondPart = fileInfo.completeSuffix();
        QString firstPart;
        if (!secondPart.isEmpty()) {
            secondPart = "." + secondPart;
            firstPart = fileName.left(fileName.size() - secondPart.size());
        } else {
            firstPart = fileName;
        }
        for (int ii = 1; ; ii++) {
            ret = QString("%1 (%2)%3").arg(firstPart).arg(ii).arg(secondPart);
            if (!QFile::exists(path + ret)) {
                return ret;
            }
        }
    }
    
    void JsonCreator::testData(const QString &currentTest,const QString str){
        convertQtToJson(currentTest, str);
    }
    
     void JsonCreator::convertQtToJson(const QString currentTest, const QString data){
        QJsonDocument  json;
        QJsonArray recordsArray;
        QJsonObject  recordObject;
    
        QJsonObject dataObject;
        dataObject.insert(data);// how to get the qml multiple listmodel data and save to this 
        recordObject.insert(currentTest, dataObject);
    
        QJsonDocument doc(recordObject);
        qDebug() << doc.toJson();
    
        recordsArray.push_back(recordObject);
        json.setArray(recordsArray);
        QString path = "C:/git/qt/ts-ui/";
        QString dateTime = QDateTime::currentDateTime().toString();
        QString file = addUniqueSuffix(path, "testdemo.json");
        QFile jsonFile(path+file);
        jsonFile.open(QFile::WriteOnly);
        jsonFile.write(doc.toJson());
        JsonFileModel jsonFileModel;
        jsonFileModel.addDetail(file, path, dateTime);
    }
    
        void JsonCreator::loadJSONData(const QString path, const QString fileName, const QString currentTest){
            QString val;
            QFile file;
            file.setFileName(path + fileName);
            file.open(QIODevice::ReadOnly | QIODevice::Text);
            val = file.readAll();
            QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
            convertJsonToQt(doc, currentTest);
        }
    

    Qml列表型号代码:

     ListModel{
            id: summaryModel1
            ListElement{key: "abc"; value:"v123"; unit: "u456"}
            ListElement{key: "abc"; value:"v123"; unit: "u456"}
            ListElement{key: "abc"; value:"v123"; unit: "u456"}
            ListElement{key: "abc"; value:"v123"; unit: "u456"}
    }
    ListModel{
            id: summaryModel2
            ListElement{key: "bac"; value:"v42"; unit: "u56"}
            ListElement{key: "bac"; value:"v42"; unit: "u56"}
            ListElement{key: "bac"; value:"v42"; unit: "u56"}
            ListElement{key: "bac"; value:"v42"; unit: "u56"}
    }
    ListModel{
            id: summaryModel3
            ListElement{key: "cab"; value:"v12"; unit: "u45"}
            ListElement{key: "cab"; value:"v12"; unit: "u45"}
            ListElement{key: "cab"; value:"v12"; unit: "u45"}
            ListElement{key: "cab"; value:"v12"; unit: "u45"}
    }
    
    Connections{
            target: jsonCreator
            onResultsDataChanged: {
                var summaries = [summaryModel1, summaryModel2, summaryModel3, summaryModel4, summaryModel5, summaryModel7, summaryModel8]
                var str = "";
                summaries.forEach(function(element){
                    for(var i = 0; i < element.count; ++i){
                        var key = element.get(i).key
                        var name = element.get(i).name
                        var val = element.get(i).value
                        var unit = element.get(i).unit
                        var val1 = element.get(i).value1
                        var unit1 = element.get(i).unit1
                        str =  key+","+ val
                    }
                });
               jsonCreator.testData(currentTestTitle, str);
            }
        }
    

    需求结果:

    {
        "test": {
            "abc": "v123",
            "abc": "v123",
            "abc": "v123",
            "abc": "v123",
            "bac": "v42",
            "bac": "v42",
            "bac": "v42",
            "bac": "v42",
            "cab": "v12",
            "cab": "v12",
            "cab": "v12",
            "cab": "v12"
        }
    }
    
    0 回复  |  直到 7 年前