Qt не поддерживает Unicode для Visual studio или Font error - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок, и теперь я изучаю Qt и работаю с Visual Studio, Extension Qt VS Tool 2.4.3, я использую текст на вьетнамском языке, и когда я собираю программу, она хороша, но кнопка показывает специальные символы.

Я прочитал несколько топи c об ошибках шрифта, но это не связано с этой ошибкой.

Image issue error

Мой код:

#include <QtWidgets/QApplication>
#include <QPushButton>
#include <QLabel>

int main(int argc, char *argv[])
{
        QApplication app(argc, argv);
        QPushButton nutBam; // instance 
        nutBam.setText("Nút khẩn cấp !"); //set Text button
        nutBam.show();
        return app.exec();
}

1 Ответ

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

Два вопроса:

  1. Как правило, не стоит использовать жестко закодированные символы Юникода в исходном файле. Редакторы и компиляторы могут иногда делать правильные вещи. Редакторы могут сохранять как UTF-8 или Unicode. Компиляторы могут считать заголовки спецификации и переключать кодировку ... обычно. Но члены команды и системы хранилища исходного кода часто делают неправильные вещи. Кто-то еще приходит вместе с другим редактором, системой управления исходным кодом и т. Д. c ... и все, что связано с юникодом, запутано. Это также ломает различные инструменты. Я видел, как это происходит слишком много раз.

  2. Qtring Qt видит, что вы передаете 8-битную строку ascii в конструктор QString. Тогда их правила интерпретации кодирования вступают в силу. Так что это будет лучше с Unicode-строкой.

Чтобы получить лучшее из обоих миров, сохраните вашу строку в исходном коде с escape-символами Unicode, но передать конструктору QString в виде широкой строки:

Я использовал этот инструмент онлайн , чтобы преобразовать некоторые из ваших символов в \uABCD escape-последовательности.

Вместо этого:

nutBam.setText("Nút khẩn cấp !");

Это:

const wchar_t* text = L"N\u00fat kh\u1ea9n c\u1ea5p !";
QString qText(text);
nutBam.setText(qText);

Хотя это больше не проблема, убедитесь, что ваш редактор сохраняет исходный код как ANSI или UTF-8, а не 16-битный Unicode.

В данный момент я не установил Qt локально, но вышеприведенное может привести к следующему:

nutBam.setText(L"N\u00fat kh\u1ea9n c\u1ea5p !");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...