有关PyQt5和UTF8初学者的提示

时间:2014-10-29 13:15:04

标签: qt unicode utf-8 pyqt5

我正在学习使用 PyQt5 (在Windows上)构建GUI。 我来了一段代码,在 PyQt4 (不是PyQt5)中明确地翻译成UTF8:

a=QApplication(args)
button=QPushButton(a.trUtf8("éàùè"),None)

经过一段谷歌搜索后,我发现trUtf8已被弃用,现在Qt5假定您的代码已经是UTF8格式化的(link):

QObject::trUtf8() and QCoreApplication::Encoding are deprecated. Qt assumes that the source code is encoded in UTF-8.

所以,我想知道如何遵守这一陈述。

即使我不是在寻找面向vim的解决方案,我还想补充说我正在使用Vim来开发我的代码。所以,我在设置中添加了以下选项:

set encoding=utf-8
set fileencoding=utf-8

这是否正确,这还够吗? 更一般地说,你需要什么UTF8兼容Qt5?

谢谢!

1 个答案:

答案 0 :(得分:2)

tr函数与编码/解码本身无关 - 它用于标记哪些文字字符串可能需要在支持多种语言的应用程序中进行翻译(如果你&# 39;熟悉gnu gettext,它与_()函数的作用相似。

标记为翻译的字符串只有在安装translator时才会被翻译。否则,字符串将保持不变。编码/解码方面仅起作用,因为C ++函数将源字符串作为const char*(即字节)并返回QString(即unicode)。因此,如果没有可用的转换,并且源字符串包含非ASCII字符,则需要执行默认解码步骤。在Qt4中,在某些情况下必须使用trUtf8明确地完成此操作(有关详细信息,请参阅the docs) - 但在Qt5中,它可以仅由tr函数处理。

如果您正在使用Python 3和PyQt5,您几乎可以忘记所有这些问题,因为默认情况下文字字符串是unicode,而UTF-8被假定为源代码编码。此外,PyQt5将始终为任何通常返回QString的Qt函数返回python unicode对象。

当然,如果您从未打算在应用程序中支持多种语言,则可以安全地省略tr的所有用法,否则它将执行无用的功能。