我正在经历非常奇怪的行为与西里尔字母。我使用的是Qt 5.12.6,Windows 10(64位)。
整个应用程序都是用QML编写的,正如你所看到的,有些单词没有任何意义,它们不是俄语。所有QML文本元素的行为都是错误的。
的数据
红色下面的顶部登录按钮看起来像这样
import QtQuick 2.7
import QtQuick.Controls 2.0
Button {
id: loginPageButton
font.capitalization: Font.AllUppercase
checkable: true
flat: true
contentItem: Text {
text: loginPageButton.text
font: loginPageButton.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
}
字符串
使用
LoginPageButton {
id: newAccountButton
text: qsTr("CREATE AN ACCOUNT")
font.pixelSize: 16
ButtonGroup.group: btnGroup
checked: false
Layout.alignment: Qt.AlignCenter | Qt.AlignVCenter
}
型
重新翻译是这样做的
QGuiApplication::removeTranslator(&m_currentTranslator);
bool isLoaded = m_currentTranslator.load(QString("tr_%1").arg(locale), QCoreApplication::applicationDirPath() + "/translations/");
if (isLoaded)
QGuiApplication::installTranslator(&m_currentTranslator);
m_engine.retranslate(); // QQmlApplicationEngine
型
而且我不得不说这个bug只在一些机器上重现,而不是所有的...
2条答案
按热度按时间mnemlml81#
“”表示马其顿语。所以如果你想要俄语的话,你的字符串编码是错误的。
引用Qt文档:“应用程序可能偶尔需要默认本地8位编码以外的编码。例如,西里尔KOI 8-R语言环境(俄罗斯事实上的标准语言环境)中的应用程序可能需要以ISO 8859-5编码输出西里尔文。代码为:
字符串
要将Unicode转换为本地8位编码,可以使用快捷方式:QString::toLocal 8Bit()函数返回这样的8位数据。另一个有用的快捷方式是QString::toUtf 8(),它返回8位UTF-8编码的文本:这完美地保留了Unicode信息,同时如果文本完全是ASCII,则看起来像纯ASCII。
对于另一种方式的转换,有QString::fromUtf 8()和QString::fromLocal 8Bit()方便函数,或通用代码,通过从ISO 8859-5 Cyrillic到Unicode的转换来演示:
型
“(1)
zz2j4svz2#
问题出在Roboto字体-我们把它换成了不同的字体,一切都恢复正常了。