Qml странное поведение с символами кириллицы c - PullRequest
0 голосов
/ 21 февраля 2020

Я испытываю очень странное поведение с буквами кириллицы c. Я использую Qt 5.12.6, Windows 10 (64 бит).

Все приложение написано с использованием QML, поскольку вы можете видеть, что некоторые слова не имеют никакого смысла, они не русские. Все элементы текста QML ведут себя неправильно.

application window

Верхние кнопки входа в систему, выделенные красным цветом, выглядят следующим образом

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

, и я должен сказать, что ошибка воспроизводится только на некоторых машинах, а не на всех ...

1 Ответ

1 голос
/ 21 февраля 2020

«Ḱ» обозначает македонский язык. Так что ваша строковая кодировка неверна, если вы хотите русский.

Цитирование из документации Qt: «Приложению иногда могут потребоваться другие кодировки, отличные от локальной 8-битной кодировки по умолчанию. Например, приложение на кириллице c Для локали KOI8-R (де-факто стандартная локаль в России) может потребоваться вывод кириллицы c в кодировке ISO 8859-5. Код для этого будет:

QString string = ...; // some Unicode text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);

Для преобразования Unicode для локальных 8-битных кодировок доступен ярлык: функция QString :: toLocal8Bit () возвращает такие 8-битные данные. Еще один полезный ярлык - QString :: toUtf8 (), который возвращает текст в 8-битной кодировке UTF-8 : это прекрасно сохраняет информацию Unicode, при этом выглядит как обычный ASCII, если текст полностью ASCII.

Для преобразования другим способом есть вспомогательные функции QString :: fromUtf8 () и QString :: fromLocal8Bit (), или общий код, демонстрируемый этим преобразованием из преобразования ISO 8859-5 кириллицы c в Unicode:

QByteArray encodedString = ...; // some ISO 8859-5 encoded text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);

" ( 1 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...