qt“资源”字符串
我想有一个地方,我可以存储我的应用程序中使用的所有字符串,所以我可以修改它们在一个地方,而不是所有的地方。就像资源文件一样,我可以在这些字符串上放一个标签,然后调用标签。qt“资源”字符串
我不知道QT为此提供了什么,所以我只需要创建一个包含所有这些字符串的头文件,并将它包含在我需要的任何地方?什么是适当的方式来做到这一点,你可以提供一个小例子?
谢谢!
我还没有使用它,但我认为,Qt国际化会让你做这样的事情,因为它的一个选择是从应用程序代码中取出所有字符串,以便它们可以被替换翻译。即使您不想使用此模块的任何其他功能,也可以让您解决您的问题。一个标签替换字符串应该是这样的:
QLabel *label = new QLabel(tr("Password:"));
的TR()函数已经是Qt类的一部分,你会得到一些更多的功能和宏免费是帮助搜索和替换字符串。 然后可以使用QtLinguist管理要替换的字符串。 您可以在这里找到更详细的解释:Internationalization with Qt
在过去[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++中的#define确实非常丑陋,但资源不能理解静态常量变量或内联函数。
以相似的方式复制它最简单的方法是使用带有字符串声明的头文件,然后在需要它们的任何位置引用这些字符串。
// 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(“Password”);'忘记'tr'是QObject的静态方法,并且当你在派生类的外部使用它时,你应该'return QObject :: tr(“密码“)'。 – 2016-05-20 15:42:34
'tr()'是这样做的最好方法,我同意。 – levu 2011-06-05 17:47:06
我会进一步研究这一点,并让你知道结果。谢谢 – prolink007 2011-06-05 17:49:28
确实。我使用翻译工具为测试/调试提供了非常详细的字符串,并在不同的翻译单元中进行交换以减少发布时间。 – 2011-06-05 19:25:23