Как отмечено в комментариях, Qt поддерживает Json, в следующей части я покажу вам пример, плюс вы должны учитывать, что C ++ дает свободу обрабатывать память, поэтому при удалении следует учитывать ее при необходимости, в случае Qt много раз это возложить на Qt ответственность через дерево родства.
*. Ч
#ifndef TOKENEDITOR_H
#define TOKENEDITOR_H
#include <QWidget>
class QTableWidget;
class TokenEditor : public QWidget
{
Q_OBJECT
public:
explicit TokenEditor(QWidget *parent = nullptr);
~TokenEditor();
private:
QTableWidget *ui_userTokens;
};
#endif // TOKENEDITOR_H
*. Каст
#include "tokeneditor.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QTableWidget>
#include <QVBoxLayout>
TokenEditor::TokenEditor(QWidget *parent) :
QWidget(parent),
ui_userTokens(new QTableWidget)
{
const std::string json = R"([{
"key": "SHOT",
"value": "",
"description": "Current Shot node name"
},
{
"key": "PASS",
"value": "",
"description": "Current Pass node name"
},
{
"key": "SELF",
"value": "",
"description": "Current node name"
},
{
"key": "MM",
"value": "",
"description": "Current month as integer ex: 12"
},
{
"key": "DD",
"value": "",
"description": "Current day as integer ex: 07"
}
])";
QJsonDocument doc = QJsonDocument::fromJson(QByteArray::fromStdString(json));
auto layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(ui_userTokens);
ui_userTokens->setRowCount(5);
ui_userTokens->setColumnCount(3);
ui_userTokens->setHorizontalHeaderLabels({"key", "value", "description"});
int r=0;
for(const QJsonValue & val : doc.array()){
QJsonObject obj = val.toObject();
int c=0;
for(const QString & key: obj.keys()){
auto *it = new QTableWidgetItem(obj[key].toString());
ui_userTokens->setItem(r, c, it);
c++;
}
r++;
}
}
TokenEditor::~TokenEditor()
{
}