首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT c++ QSplitter saveState和restoreState

QT c++ QSplitter saveState和restoreState
EN

Stack Overflow用户
提问于 2020-03-19 14:53:45
回答 1查看 591关注 0票数 2

我有一个拆分器,我想用JSON文件保存他的状态。

代码语言:javascript
复制
QJsonObject mainJson;
// here I have to convert QByteArray to QString
mainJson.insert("test", QTextCodec::codecForMib(1015)->toUnicode(ui->splitter->saveState()));

QFile file("test.json");
QTextStream textStream;
file.open(QFile::WriteOnly);
textStream.setDevice(&file);
textStream.setCodec("UTF-8");
textStream << QString(QJsonDocument(mainJson).toJson()).toUtf8();
textStream.flush();
file.close();

但是文件包含以下内容:

\u0000＀\u0000Ā\u0000Ȁ\u0000Ⰱ\u0000쐀\u0000\u0000Ā\u0000Ȁ

这样可以吗?以及如何将其转换回QByteArray for ui->splitter->restoreState(...);?PS:我使用来自here的代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-19 15:48:44

通常的逻辑是将QByteArray转换为QString,在这种情况下,我更愿意将它转换为base64,而不是使用unicode的编解码器来避免压缩和解压缩问题。

考虑到上述情况,解决办法是:

保存:

代码语言:javascript
复制
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();
}

恢复:

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60759657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档