首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QSettings或QJson保存UI设置?

用QSettings或QJson保存UI设置?
EN

Stack Overflow用户
提问于 2017-02-06 04:58:37
回答 1查看 5.6K关注 0票数 9

使用QSettings保存UI设置非常麻烦和错误,因为每次您必须使用setValue()value()函数并定义组、应用程序名称和组织,这些在大型应用程序中都可能是错误的:

代码语言:javascript
复制
QSettings settings(qApp->applicationDirPath() + "/" + qApp->applicationName() + ".ini" , QSettings::IniFormat) ...

settings.beginGroup("someGroup");
settings.setValue("someKey", "blah blah");
QString str = settings.value("someKey");
settings.endGroup();

然而,对于JSON,它可以更简单:

代码语言:javascript
复制
QJsonObject obj;
obj["someKey"] = "blah blah"
...

保存和还原ui设置的最佳实践是什么?

  • QSettings中保存每个键/值
  • 保存在QJson中,然后用QSettings保存
  • 只在QJson中保存(使用另一种定义组和应用程序的机制)?

还有别的主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 07:55:00

如果您使用第一个示例的所有优点,QSettings代码不会比您的QJsonObject示例更麻烦。

默认的QSettings构造函数:

您可以只设置一次应用程序和组织名称。

代码语言:javascript
复制
QApplication::setApplicationName("My Application");
QApplication::setOrganizationName("My Organization");
QSettings::setDefaultFormat(QSettings::IniFormat);

然后,只需在代码中的任何地方使用默认的QSettings构造函数即可。

代码语言:javascript
复制
QSettings settings;
settings.setValue("Key", "Value");

作为论点的团体:

可以不使用beginGroup() / endGroup()方法来设置键的设置组。只需将斜杠分隔的参数传递给value()/ setValue()方法:

代码语言:javascript
复制
settings.setValue("Group/Key", "Value");

存储UI设置:

从您的问题中不清楚您想要保存哪些确切的UI设置,但是有两种方便的方法-- QWidget::saveGeometry()QMainWindow::saveState()。您可以使用它分别存储windows、几何学状态

代码语言:javascript
复制
QSettings settings;
settings.setValue("ui/geometry", saveGeometry());
settings.setValue("ui/state", saveState());

杰森:

如果您仍然希望对设置文件进行深度嵌套和层次结构,那么您将不得不使用JSON。最方便的方法是使用QSettings::registerFormat注册自定义的读写函数。为什么还是QSettings?这个类的设计考虑了跨平台代码,不需要重新发明轮子.

当然,您也可以从头开始编写自己的JSON设置类。但是,如果不需要在多级设置层次-这值得吗?

在应用程序设计方面,您可以将QSettings包装在一个额外的类中。在这种情况下,您可以轻松地实验并切换到您自己的JSON读/写实现,而无需接触主代码。

标准系统路径:

在您的示例中,您使用applicationDirPath()存储设置数据。这是为大多数应用程序保存设置的一个不适当的地方(例如,在这种情况下,您可能会面临Windows问题;Unix系统也有独立的目录来处理此类文件)。使用操作系统用于存储应用程序数据的路径。

例如,在Windows QSettings::setDefaultFormat(QSettings::IniFormat)上,加上默认范围(UserScope),将把设置存储在%APPDATA%路径中。这也提高了代码的跨平台可移植性。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42060573

复制
相关文章

相似问题

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