Лог c в общем случае заключается в преобразовании QByteArray в QString, в этом случае я предпочитаю преобразовывать его в base64, чем использовать код c для Unicode, чтобы избежать проблем сжатия и распаковки.
Учитывая вышеизложенное, решение:
Сохранение:
QJsonObject mainJson;
QByteArray state = spliter->saveState();
mainJson.insert("splitter", QJsonValue(QString::fromUtf8(state.toBase64())));
QFile file("settings.json");
if(file.open(QIODevice::WriteOnly)){
file.write(QJsonDocument(mainJson).toJson());
file.close();
}
Восстановление:
QJsonDocument doc;
QFile file("settings.json");
if(file.open(QIODevice::ReadOnly)){
doc = QJsonDocument::fromJson(file.readAll());
file.close();
}
if(doc.isObject()){
QJsonObject obj = doc.object();
QByteArray state = QByteArray::fromBase64(obj.value("splitter").toString().toUtf8());
spliter->restoreState(state);
}