精华内容
下载资源
问答
  • 关于Qt中的tr()函数讲解

    千次阅读 2016-10-17 10:02:37
    在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr(2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包...

    在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:

    • (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr
    • (2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:
      • (2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)
      • (2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻译包)

    注意哦,如果你正在用tr包裹中文字符,却不属于(2b),那么,这是个信号:

    • 你在误用tr
    • 你需要的是QString,而不是tr

    如果你确实属于(2b),请做好心理准备,你可能还会遇到很多困难,请考虑Qt国际化(源码含中文时)的点滴分析

    tr 是做什么的?下面二者的区别是什么?

    QString text1 = QObject::tr("hello"); QString text2 = QString("hello");

    tr是用来实现国际化,如果你为这个程序提供了中文翻译包(其中hello被翻译成中文"你好"),那么text1的内容将是中文"你好";如果你为程序提供且使用日文翻译包,那么text1的内容将是日文。

    tr是经过多级函数调用才实现了翻译操作,是有代价的,所以不该用的时候最好不要用。

    关注的对象

    本文关注的是tr或translate中包含中文字符串的情况:

    • QObject::tr()

    • QCoreApplication::translate()

    • QTextCodec::setCodecForTr

    这个问题本多少可说的。因为涉及到的编码问题和QString 与中文问题中是完全一样的,只不过一个是用的setCodecForCStrings一个用的是setCodecForTr。

    简单回顾QString的中文问题

    • QString 采用的unicode,在中文支持上不存在任何问题
    • "我是中文" 这是传统的 const char * 的窄字符串

    • 当将窄字符串赋值到QString时,我们需要告诉它我们的窄串采用的何种编码(gbk?、utf-8?)
    • 究竟何种编码主要取决于我们的源代码文件的编码(windows上一般是gbk,其他平台一般utf-8)

    例子:

    QString s1 = "我是中文"; QString s2("我是中文"); QString s3; s3 = "我是中文"
    • s1、s2 用的是QString的构造函数QString ( const char * str )

    • s3 用的是QString的赋值操作符 QString & operator= ( const char * str)

    如果不指定编码,s1,s2,s3将全部都是(国内大多数人所称的)乱码。因为QString将这些const char *按照latin1来解释的,而不是用户期待的gbk或utf8。

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"))

    这两条语句中的一条可以解决问题,至于如何选择,此处不再重复。

    QObject::tr

    说实话,在tr中使用中文不是个好主意。不过既然总有人用(无论是(1)还是(2b)),而且总有人遇到问题,所以还是简单整理一下吧。

    相比QCoreApplication::translate,大家用tr应该用的很多了,尽管不少人不清楚tr究竟是做什么的^_^

     

     

    tr("我是中文");

    这调用的是下面这个函数(至少我们可这么认为是)。

    QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 )

    与QString("我是中文")完全一样,你必须告诉tr这个窄字符串是何种编码?你不告诉它,它就用latin1。于是所谓的乱码问题就出来了。

    如何告诉tr你写的这几个汉字在磁盘中保存的是何种编码呢?这正是

    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    所做的。这两个选择的原则,由于和前文完全一样,此处也不再重复。

    如果你的编码采用的utf8,可以直接使用trUtf8而不必设置setCodecForTr。

    如果你只关心乱码问题,到此为止就可以了(下面不再关注编码)。如果想对tr进一步了解,不妨。。继续。。

     

    QCoreApplication::translate

    我们知道tr是用于实现程序的国际化(或者说多语言翻译),看Qt相关资料的话,我们知道实现该功能的还有下面这个函数:

    QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * disambiguation, Encoding encoding, int n )

    其实,这个才是真正进行翻译操作的函数,前面我们提到的tr最终是通过调用该函数来实现翻译功能的(稍后我们会看tr是如何调用translate的)。

    对tr和这个函数,manual中都有比较详尽的解释。我们这儿简单看一下它的这几个参数:

    • context 上下文,一般就是需要翻译的字符串所在的类的名字
    • sourceText 需要翻译的字符串。(我们关注的编码其实就是它的编码)
    • disambiguation 消除歧义用的。(比如我们的类内出现两处"close",一处含义是关闭,另一处含义是亲密的。显然需要让翻译人员知道这点区别)
    • encoding 指定编码。它有两个值
      • CodecForTr 使用setCodecForTr()设置的编码来解释 sourceText

      • UnicodeUTF8 使用utf8编码来解释 sourceText
      • 其实这两个分别对应tr和trUtf8
    • n 处理单复数(对中文来说,不存在这个问题)

    tr与translate

    这两个函数的说明,一个在QObject的manual,另一个在QCoreApplication的manual中。

    介绍一下tr与translate的关系。前面提到了,tr调用的是translate。如果仅仅这样一说,没有证据,还真难以让大家相信。好吧,继续

    tr 在何处定义

    你可能说:这不废话吗,manual中写得明白的,它是QObject的静态成员函数。而且还有源码为证:

    //来自 src/corelib/kernel/qobject.h #ifdef qdoc static QString tr(const char *sourceText,const char *comment = 0int n = -1); static QString trUtf8(const char *sourceTextconstchar *comment = 0int n = -1); #endif

    嘿嘿,差点就被骗了,发现没:它们被预处理语句包住了。

    这说明了什么呢?说明了这段代码仅仅是用来生成Qt那漂亮的文档的(qdoc3从代码中抽取信息,生成一系列的html格式的manual)。

    啊,也就是说,这是假的。那么真正的定义呢??在一个大家都很熟悉的地方,猜猜看?

    这就是

    Q_OBJECT

    该宏的定义在src/corelib/kernel/qobjectdefs.h中

    #define Q_OBJECT \  public: \  Q_OBJECT_CHECK \  static const QMetaObject staticMetaObject; \  Q_OBJECT_GETSTATICMETAOBJECT \  virtual const QMetaObject *metaObject() const; \  virtual void *qt_metacast(const char *); \  QT_TR_FUNCTIONS \  virtual int qt_metacall(QMetaObject::Call, int, void **); \  private:

    其中的宏QT_TR_FUNCTIONS

    # define QT_TR_FUNCTIONS \  static inline QString tr(const char *s, const char *c = 0) \  { return staticMetaObject.tr(s, c); } \  static inline QString trUtf8(const char *s, const char *c = 0) \  { return staticMetaObject.trUtf8(s, c); } \  static inline QString tr(const char *s, const char *c, int n) \  { return staticMetaObject.tr(s, c, n); } \  static inline QString trUtf8(const char *s, const char *c, int n) \  { return staticMetaObject.trUtf8(s, c, n); }

    现在看到:tr调用的是 staticMetaObject对象的tr函数,staticMetaObject 的定义在moc生成的 xxx.moc 或 moc_xxx.cpp 文件内(你随时可以验证的)。

    staticMetaObject 是一个 QMetaObject 类的实例,我们继续看一下该类的源码:

    /*!  \internal */  QString QMetaObject::tr(const char *sconst char *cconst  {  returnQCoreApplication::translate(d.stringdatascQCoreApplication::CodecForTr);   /*! \internal */ QString QMetaObject::trUtf8(const char *sconst char *cconst { returnQCoreApplication::translate(d.stringdatascQCoreApplication::UnicodeUTF8);

    }


    转载自:http://blog.csdn.net/tju355/article/details/7253133

    展开全文
  • Qt中tr()的作用

    千次阅读 2018-05-29 15:40:24
    函数 tr()全名是QObject::tr(),被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用。只要记住,Qt 的最佳实践:如果你想让你的程序国际化的话,那么,所有用户可见的字符串都要使用 ...

    函数 tr()全名是QObject::tr(),被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用

    只要记住,Qt 的最佳实践:如果你想让你的程序国际化的话,那么,所有用户可见的字符串都要使用 QObject::tr()!

    但是,为什么我们没有写 QObject::tr(),而仅仅是 tr()呢?原来,tr()函数是定义在 Object里面的,所有使用了 Q_OBJECT 宏的类都自动具有 tr()函数


    在书中看到的一句话,如果想要你做的程序国际化,就把所有用户可见的字符串写到tr()中去,可直接用工具翻译成多语言的版本

    展开全文
  • HTML表单tr、th、tb的区别

    千次阅读 2017-09-06 15:34:13
    tr表示table中的行;th表示table中的表的头部,例如一篇文章的标题;tb表示table中的列

    tr表示table中的行;th表示table中的表的头部,例如一篇文章的标题;tb表示table中的列

    展开全文
  • table中tr和td是谁的缩写

    千次阅读 2011-05-30 19:46:00
    首标签和尾标签...tr是“table row(表格行)”的缩写,用于表示一行的开始和结束。这也容易理解。td是“table data(表格数据)”的缩写,用于表示行中各个单元格(cell)的开始和结束。这些都是容易理解的。

    • 首标签<table>和尾标签</table>分别表示一个表格的开始与结束。这是不难理解的。
    • tr是“table row(表格行)”的缩写,用于表示一行的开始和结束。这也容易理解。
    • td是“table data(表格数据)”的缩写,用于表示行中各个单元格(cell)的开始和结束。这些都是容易理解的。

    展开全文
  • TR069是什么鬼

    万次阅读 2019-06-19 22:15:54
    一,TR069是什么 1,概念 搞嵌入式或通信设备的,或多或少都会听说TR069。那他是什么鬼? TR069,就是CPE广域网管理协议。 它用于ACE和CPE之间的自动协商交互,能够实现终端的自动配置。(ACE:自动配置...
  • tr069简单实现源码分享

    热门讨论 2015-02-03 21:43:55
    tr069简单实现源码分享
  • TR是技术评审的英文Technical Review的缩写,目的是尽早地发现工作成果中的缺陷,并帮助开发人员及时消除缺陷,从而有效地提高产品的质量。 产品开发中,TR是技术评审节点。 下面是某产品的技术评审点,供参考: ...
  • html<table><th><tr><td><caption><thead><tbody>属性总结
  • tr命令

    千次阅读 2018-05-29 09:43:30
    tr命令
  • html 中 table tr td br 什么意思 是什么的缩写

    千次阅读 多人点赞 2019-04-23 12:07:27
    该行以</tr>结束,然后紧接着以<tr>另起一行。该行也包含两个单元格,最后整个表格以结束。   br 是break 的缩写 换行的意思 和 没有任何区别 因为 html 4.0 他不是一个严谨型语言 语言...
  • TR069

    千次阅读 2018-04-23 10:28:44
    tr069简介 全称是“用户终端设备广域网管理协议(CWMP) 用于远程终端管理,比如远程的配置阿什么的(对远程的设备进行配置等管理) 1. TR069协议网络架构 ACS为自动配置服务器,负责对终端设备CPE进行管理...
  • TR组件基础内容

    千次阅读 2020-10-16 22:01:07
    ISO_SW, output TR_1st_TR_SW1, output TR_2nd_ISO_SW, output TR_2nd_TR_SW1, output TR_3rd_ISO_SW, output TR_3rd_TR_SW1, output TR_4th_ISO_SW, output TR_4th_TR_SW1, output IFSW_P, output IFSW_N );...
  • TR-069协议中英文版

    热门讨论 2013-01-11 00:01:43
    rar包中包含tr069协议英文原版和中文翻译版,都是pdf文件
  • TR069 测试

    千次阅读 2019-09-08 09:41:38
    对于需要测试TR069的用户,可以使用一个免费的测试平台。 TR069云平台,中国最好的免费配置平台。 一个完全免费并且功能强大的TR069 ACS平台。 TR069智能云平台提供了完全免费的终端自动配置系统. 使用须知: 1.首先...
  • TR-111(属于TR069协议族)

    热门讨论 2008-12-30 19:11:50
    Applying TR-069 to Remote Management of Home Networking Devices
  • TR104,tr069协议组中的一个,英文
  • tr命令用法总结

    千次阅读 2019-05-31 10:30:09
    tr命令用法总结功能简介命令格式常用选项常见用法大小写转换将Windows文件中的CRLF换为LF删除Windows文件中的'^M'字符删除连续的字符删除数字只保留数字 功能简介 Translate or Delete characters, 主要用来转换或者...
  • TR069协议简单理解

    千次阅读 2018-10-19 11:32:34
    TR069协议简单理解 tr069 协议代码逻辑整理总结: 1.协议初始化 1) log相关的初始化工作; 2) 读取配置文件,包括协议相关参数的初始化、是否第一次运行(为之后第一次inform做准备)、是否包含上次运行未完成任务(如...
  • th tr td区别

    千次阅读 2019-04-15 15:58:32
    tr定义行th表示头部td表示单元格tr不能单独存在,相当于table的属性标签,而th,td也应当放在tr中。<th>不光是粗体,还是居中的。<!DOCTYPE html><html><head><meta charset="UT...
  • tr 显示与隐藏

    万次阅读 2018-10-11 22:38:58
    当某个值发生改变tr是否隐藏和显示时,显示的样式会被覆盖。显示与之前的样式不一。 解决办法为使用:在tr上添加一个ID,根据某个值来调用$("id).show()/hide()来显示,使用这个方法就原来的样式就不会丢失。...
  • 矩阵的tr

    千次阅读 2018-10-21 17:29:40
    转载请声明出处:link 在线性代数中,nnn 乘 nnn 方阵 “A\boldsymbol{A}A” 的迹,是指 “A\boldsymbol{A}A” 的主对角线各元素的总和...tr(\boldsymbol{A})=\boldsymbol{A}_{1,1}+\boldsymbol{A}_{2,2}+...+\bo...
  • 问题描述:要将页面的table设为不可编辑 方案1 document.getElementById("tableid").disabled = "true"; 通过这种方式设置,只是把整个...然后就想通过给每个tr标签设置name属性(name=“hi...
  • 1.为什么需要TR069 随着VoIP、IPTV等越来越多IP终端设备的普及(尤其在家庭中的普及),大量设备的配置和维护变得越来越困难,大大提高了网络产品运营商的成本,传统的基于SNMP的网管系统面对众多的终端设备时显得...
  • tr命令详解

    万次阅读 2017-08-18 19:20:30
    tr -c -d -s [“string1_to_translate_from”] [“string2_to_translate_to”] -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。 -d 删除字符串1中所有输入字符。 -s 删除所有重复出现字符序列,只...
  • [Shell]tr命令详解

    万次阅读 2016-10-31 21:19:58
    1. 用途tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。2. 语法tr [OPTION]... SET1 [SET2]3. 参数3.1 -s 压缩重复字符-s: squeeze-repeats,用SET1指定的字符来替换对应...
  • TR069协议详解

    万次阅读 2016-05-31 17:47:45
    一、关于TR069协议  TR069, 全称“Technical Report 069”,是由DSL Forum(一个非盈利性的全球行业联盟,致力于发展宽带网络规范,其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商,现已更名为...
  • vue table tr细节问题

    千次阅读 2018-09-12 15:07:13
    template: '<tr><td>This a row</td></tr>' }) var app = new Vue({ el: " #root ", data: { }, })  会出现以下问题:  tr 使用模板后,出在table标签 外面 了。不符合web规范.使用<tr is=...
  • table动态添加、删除tr

    千次阅读 2017-05-21 10:58:48
    //$("<tr></tr>").append("新增</td>") // .append("<td>16</td>") // .append("<td>13067899999</td>") // .append("<td><input type=\"text\" name=\"address\" value=\"\"/></td>") // .append("<td>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 835,060
精华内容 334,024
关键字:

tr是啥