String qt";资源“;一串

String qt";资源“;一串,string,qt,String,Qt,我想有一个地方,我可以存储在我的应用程序中使用的所有字符串,所以我可以修改他们在一个地方,而不是所有的地方。类似于资源文件,我可以在字符串上放置标签,然后调用标签 我不知道QT为此提供了什么,所以我是否只需要创建一个包含所有这些字符串的头文件,并将其包含在我需要的任何地方?你能举个小例子吗 谢谢 我还没有使用它,但我认为,Qt国际化将允许您执行类似的操作,因为它的一个选项是从应用程序代码中取出所有字符串,以便用翻译替换它们。即使您不想使用此模块的任何其他功能,它也将允许您解决问题。替换标签的字符

我想有一个地方,我可以存储在我的应用程序中使用的所有字符串,所以我可以修改他们在一个地方,而不是所有的地方。类似于资源文件,我可以在字符串上放置标签,然后调用标签

我不知道QT为此提供了什么,所以我是否只需要创建一个包含所有这些字符串的头文件,并将其包含在我需要的任何地方?你能举个小例子吗


谢谢

我还没有使用它,但我认为,Qt国际化将允许您执行类似的操作,因为它的一个选项是从应用程序代码中取出所有字符串,以便用翻译替换它们。即使您不想使用此模块的任何其他功能,它也将允许您解决问题。替换标签的字符串如下所示:

QLabel *label = new QLabel(tr("Password:"));
tr()函数已经是Qt类的一部分,您可以免费获得更多的函数和宏,帮助搜索和替换字符串。 然后,要替换的字符串可以由qtlangist管理。
您可以在这里找到更详细的解释:

在过去[1],当使用Windows资源时,人们一直在使用:

// in your project_strings.h file
#define STRING_PASSWORD 1
...

// resources project.rc
#include "project_strings.h"
STRINGTABLE
BEGIN
STRING_PASSWORD "Password:"
...
END

// in some other file
#include "project_strings.h"
CString str(STRING_PASSWORD);
CString知道windows资源(丑陋的依赖项),可以读取字符串密码。在现代C++中,定义是非常丑陋的,但是资源不能理解静态const变量或内联函数。 以一种类似的方式复制它的最简单方法是使用带有字符串声明的头文件,然后在需要它们的任何地方引用这些字符串

// in your project_strings.h
namespace MyProjectStrings {
const char *password;
...
}

// the project_strings.cpp for the strings
#include "project_strings.h"
namespace MyProjectStrings {
const char *password = "Password:";
...
}

// some random user who needs that string
#include "project_strings.h"
std::string password(MyProjectStrings::password);
现在,您的所有字符串都在project_strings.cpp中,您无法用tr()轻松地翻译它们。。。但您可以使用函数转换所有这些字符串声明:

// in your project_strings.h
namespace MyProjectStrings {
const char *password(); //[2]
...
}

// the project_strings.cpp for the strings
#include "project_strings.h"
namespace MyProjectStrings {
const char *password() { return QObject::tr("Password:"); }
...
}

// some random user who needs that string
#include "project_strings.h"
std::string password(MyProjectStrings::password()); //[3]
瞧!您在一个地方有一个包含所有字符串的长表,并且是可翻译的

[1] 许多人仍在使用这个计划

[2] 该函数可以将std::string返回到100%,以防止修改原始字符串


[3] 在最后一个示例中,字符串引用使用(),因为它是一个函数调用。

tr()
是实现这一点的最佳方法,我同意。我将进一步研究这一点,并让您知道结果。谢天谢地。我使用翻译工具提供非常详细的字符串,以便在不同的翻译单元中进行测试/调试和交换,以便将其缩减以供发布。如果我错了,请纠正我,但是。。。有了这个tr(),所有的原始字符串仍然到处都是,这正是prolink007想要摆脱的,对吗?在你的例子中,你会像
return tr(“Password”)
忘记了
tr
是QObject的静态方法,当您在从它派生的类之外使用它时,您应该
返回QObject::tr(“密码”)