将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 ¤tTest,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"
}
}