gpt4 book ai didi

qt - 使用 QSettings 或 QJson 保存 UI 设置?

转载 作者:行者123 更新时间:2023-12-02 22:21:50 24 4
gpt4 key购买 nike

使用QSettings保存UI设置既麻烦又容易出错,因为每次你都必须使用setValue()value()函数,而且定义组、应用程序名称和组织,这些在大型应用程序中可能会出现错误:

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 可以更简单:

QJsonObject obj;
obj["someKey"] = "blah blah"
...

保存和恢复用户界面设置的最佳实践是什么?

  • 将每个键/值保存在QSettings中吗?

  • 保存在QJson中,然后使用QSettings保存?

  • 仅保存在 QJson 中(使用另一种定义组和应用程序的机制)?

还有其他想法吗?

最佳答案

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

默认QSettings构造函数:

您只需设置一次应用程序和组织名称:

QApplication::setApplicationName("My Application");
QApplication::setOrganizationName("My Organization");
QSettings::setDefaultFormat(QSettings::IniFormat);

然后只需在代码中的任何位置使用默认的 QSettings 构造函数即可:

QSettings settings;
settings.setValue("Key", "Value");

将组作为参数:

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

settings.setValue("Group/Key", "Value");

存储用户界面设置:

从您的问题中不清楚您要保存的确切 UI 设置,但是有两种方便的方法 – QWidget::saveGeometry()QMainWindow::saveState() 。您可以用它来存储您的窗口geometrystate分别是:

QSettings settings;
settings.setValue("ui/geometry", saveGeometry());
settings.setValue("ui/state", saveState());

JSON:

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

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

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

标准系统路径:

在您的示例中,您使用 applicationDirPath() 来存储设置数据。对于大多数应用程序来说,保存设置的位置不合适(例如,在这种情况下,您可能会遇到 Windows UAC 问题;Unix 系统也有此类文件的单独目录)。使用操作系统指定的路径来存储应用程序数据。

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

关于qt - 使用 QSettings 或 QJson 保存 UI 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42060573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com