qt对所有文字形式的文本使用tr()
2013-10-29 13:53
344 查看
qt对所有文字形式的文本使用tr()
无论你的程序在哪里对将会呈现给用户的文本使用了"quoted text",要确保它被QApplication::translate()函数处理过。其实做到这一点只需要使用QObject::tr()。例如,假设LoginWidget是QWidget的一个子类:LoginWidget:: LoginWidget()
{
QLabel *label = new QLabel( tr("Password:"), this );
...
}
这就解决了你可能要写的用户可见的字符串的99%。
如果这些quoted text不是在QObject子类的成员函数中,可以使用一个适当的类的tr()函数,或者直接使用QApplication::translate() 函数:
void some_global_function( LoginWidget *logwid )
{
QLabel *label = new QLabel(
LoginWidget::tr("Password:"), logwid );
}
void same_global_function( LoginWidget *logwid )
{
QLabel *label = new QLabel(
qApp->translate("LoginWidget", "Password:"),
logwid );
}
如果你需要不在函数里的可翻译文本,有两个宏可以帮忙:QT_TR_NOOP()和QT_TRANSLATE_NOOP()。它们仅仅标示出文本,以便于被下面描述的lupdate工具提取。宏扩展为只是文本(没有上下文)。
QT_TR_NOOP()的例子:
QString FriendlyConversation::greeting( int greet_type )
{
static const char* greeting_strings[] = {
QT_TR_NOOP( "Hello" ),
QT_TR_NOOP( "Goodbye" )
};
return tr( greeting_strings[greet_type] );
}
QT_TRANSLATE_NOOP()的例子:
static const char* greeting_strings[] = {
QT_TRANSLATE_NOOP( "FriendlyConversation", "Hello" ),
QT_TRANSLATE_NOOP( "FriendlyConversation", "Goodbye" )
};
QString FriendlyConversation::greeting( int greet_type )
{
return tr( greeting_strings[greet_type] );
}
QString global_greeting( int greet_type )
{
return qApp->translate( "FriendlyConversation",
greeting_strings[greet_type] );
}
如果你使用定义的宏QT_NO_CAST_ASCII编译你的软件,从而关闭了从const char*到QString的自动转换,你很可能会捕捉到你错过的字符串。更多信息参见QString::fromLatin1()。关闭这个转换会使编程有点儿麻烦。
如果你的源码语言使用Latin-1之外的字符集,你会发现QObject::trUtf8()比QObject::tr()更好用,因为tr()依赖于 QApplication::defaultCodec(),这使它比QObject::trUtf8()更脆弱。
相关文章推荐
- qt对所有文字形式的文本使用tr()
- qt对所有文字形式的文本使用tr()
- 使用BlockingQueue查找某个文件夹下的所有文本文件中是否包含文字
- [Bug]QT解决中文乱码(tr的使用 | QTextCodec)
- 像文字一样的按钮,submit按钮以文本的形式显示出来
- Qt编程17:QFont文字属性设置(简单使用)
- Linux下使用xargs将多行文本转换成一行并用tr实现逗号隔开
- Android使用XUtils框架上传照片(一张或多张)和文本,服务器接收照片和文字(无乱码)
- 基本上包含了Foudation框架内的所有函数和方法。 使用方法:全选,自己建一个文本类的文件,如果要使用某个方法却想不起来方法名,直接在文本中搜索关键字即可。
- Emacs中使用Forms-mode以表格形式展示/编辑简单的文本数据
- Qt学习笔记2014.7.17.14:16——下拉框使用以及设置文字字体、字号
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
- 编写一个函数,接受三个string参数,s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用他替换通用的简写形式,如,将“tho”,将“”“”
- 实现Recovery形式本地化显示文本定制(recovery_l10n工具的使用
- Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)
- [Qt] tr的使用报错
- QT使用正则表达式输入文本。
- 使用 grep 查找所有包含指定文本的文件
- 自动识别文字的编码以及读取所有文本——VB2005
- Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good