gpt4 book ai didi

c++ - Qt : Avoid Rebuilding Applications incase strings change

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:51 24 4
gpt4 key购买 nike

我想知道在 QT 应用程序中存储字符串的选项是什么。我的主要要求之一是不重建整个项目或任何文件,以防万一一个字符串发生变化,并将所有字符串放在一个地方。简而言之,我想将字符串放在一个地方并在应用程序启动期间提取它们

最佳答案

我已经使用了上述答案中提到的所有元素。

XMLJSONQSettings 带 Ini 文件、tr()

他们都可以做得很好。我整理了一些关于不同选项的注释:

QTranslator

Qt Linguist 和 tr() 标签旨在获取您的常用语言并将其翻译成另一种语言。在没有 Qt Linguist 的情况下跟踪多个版本的英文翻译和修改/发布几乎是不可能的。 Qt Linguist 需要“发布”您的翻译并将其从 TS 文件(翻译源)转换为优化的 QM 文件。

The QM file format is a compact binary format that is used by the localized application. It provides extremely fast lookups for translations.

这是使用翻译文件的样子:

 QTranslator translator;
translator.load("hellotr_la");
app.installTranslator(&translator);

http://qt-project.org/doc/qt-4.8/qtranslator.html#details

我认为使用 QTranslator 进行一些字符串更改可能是一个奇怪的用例,除非您使用它来本地化您的程序。但正如文档所说,它针对非常快速的字符串替换查找进行了优化。

QXMLStreamReader

流阅读器是访问 XML 文件的“推荐”方式,或者至少具有更好的支持。您编写自己的文件来组织它,或者编写代码来生成 XML。

<STRING_1>Some string</STRING_1>

这是导航到 xml 的样子。

QXmlStreamReader xml;
...
while (!xml.atEnd()) {
xml.readNext();
... // do processing
}
if (xml.hasError()) {
... // do error handling
}

XML 与 Json 非常相似,但文件更大,开始和结束标签更长。有更多的 XML 股票阅读器。在许多情况下,它也更易于阅读,因为很多人都知道 html,而且它们非常相似。

QJson文档

Qt 5 中的 JSON 支持看起来非常好。 我还没有用它构建一个项目 它看起来很简单,就访问和设置而言,它看起来就像使用字典、 map 或 vector 一样。

更新:您只需将指针传递到您的 QJsonDocument 或您的 QJsonObject 或您的 QJsonArray 中,因为您正在深入导航或将更多内容附加到你的 Json 文件。完成后,您可以将其保存为二进制文件,或保存为明文、人类可读的文件,并带有适当的缩进和所有内容!

How to create/read/write JSon files in Qt5

对于许多人来说,Json 似乎正在成为 XML 的替代品。我喜欢使用 Json 保存和加载角色扮演游戏状态的示例。

http://qt-project.org/doc/qt-5/qtcore-savegame-example.html

Q设置

QSettings 是我的最爱之一,因为它得到了很长时间的支持,而且大多数持久性设置都应该以这种方式保存和访问。

当我使用它时,为了利用默认值和回退机制,我将它放在我的 main.cpp 中:

 QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");

因为有时我发现需要在 Windows 中手动编辑这些设置,所以我使用 Ini 格式。

QSettings::setDefaultFormat(QSettings::IniFormat); // also in main.cpp

然后当我部署我的 exe 时,我想加载特定的值而不是硬编码的默认值,安装程序将主要回退到

C:/ProgramData/MySoft/Star Runner.ini

当程序在运行时保存更改时,它会保存到:

C:/Users/<username>/AppData/Roaming/MySoft/Star Runner.ini

然后在我的整个程序中,如果我需要获取设置或设置设置,只需 3 行或更少的代码。

// setting the value
QSettings s;
s.setValue("Strings/string_1", "new string");


// getting the value
QString str;

QSettings s;
str = s.value("Strings/string_1", "default string").toString();

这是您的 ini 文件的样子:

[Strings]
string_1=default string

QSettings 如果您要存储一些要在部署或运行​​时更改的字符串,则可以使用。 (或者如果现在选中了一个复选框,或者您的窗口大小和位置,或者最近的文件列表等等)。

QSettings 已经过相当多的优化并且经过深思熟虑。 ini 支持很棒,除了它有时会重新排序组和键(通常按字母顺序),并且它可能会删除您在其中添加的任何注释。我认为 ini 注释要么以 ; 开头,要么以 # 开头。

希望对您有所帮助。

关于c++ - Qt : Avoid Rebuilding Applications incase strings change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20901247/

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