6 using namespace nlohmann::detail;
10 : QAbstractItemModel(parent)
12 QVector<QVariant> rootData;
13 foreach (QString header, headers)
35 if (role != Qt::DisplayRole && role != Qt::EditRole)
48 return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
53 if (
index.isValid()) {
55 if (item)
return item;
63 if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
78 return createIndex(row, column, childItem);
87 beginInsertColumns(
parent, position, position + columns - 1);
99 beginInsertRows(
parent, position, position + rows - 1);
108 if (!
index.isValid())
109 return QModelIndex();
115 return QModelIndex();
117 return createIndex(parentItem->
childNumber(), 0, parentItem);
124 beginRemoveColumns(
parent, position, position + columns - 1);
139 beginRemoveRows(
parent, position, position + rows - 1);
156 if (role != Qt::EditRole)
169 const QVariant &value,
int role)
171 if (role != Qt::EditRole || orientation != Qt::Horizontal)
177 emit headerDataChanged(orientation, section, section);
186 QVector<QVariant> columnData;
201 int len =
data->size();
202 nlohmann::json::iterator dataIt =
data->begin();
204 for (
int i = 0; i < len; i++)
207 auto key = dataIt.key();
208 auto vType =
data->type();
209 QVariant keyIndex, keyData, keyType;
210 if (vType == value_t::array )
212 QString arrayIndex(
"");
213 arrayIndex.append(QString().sprintf(
"%i", i));
214 keyIndex = QVariant(arrayIndex);
215 keyData = QVariant(tr(dataIt->dump().c_str()));
221 keyIndex = QVariant(tr(key.c_str()));
222 if (dataIt.value().type() != value_t::object ) {
223 keyData = QVariant(tr(dataIt->dump().c_str()));
226 keyData = QVariant(
"");
232 columnData.push_back(keyIndex);
233 columnData.push_back(keyData);
234 columnData.push_back(keyType);
238 for (
int column = 0; column < columnData.size(); ++column)
241 if (
data->type() == value_t::array)
243 if (dataIt.value().type() == value_t::array || dataIt.value().type() == value_t::object)
250 if (dataIt.value().type() == value_t::array || dataIt.value().type() == value_t::object)
271 typeString = tr(
"array");
273 case value_t::boolean:
274 typeString = tr(
"boolean");
276 case value_t::number_integer:
277 typeString = tr(
"integer");
280 typeString = tr(
"null");
282 case value_t::object:
283 typeString = tr(
"object");
285 case value_t::number_float:
286 typeString = tr(
"double");
288 case value_t::string:
289 typeString = tr(
"string");
291 case value_t::number_unsigned:
292 typeString = tr(
"unsigned integer");
295 typeString = tr(
"type error");