Два вопроса:
Как правило, не стоит использовать жестко закодированные символы Юникода в исходном файле. Редакторы и компиляторы могут иногда делать правильные вещи. Редакторы могут сохранять как UTF-8 или Unicode. Компиляторы могут считать заголовки спецификации и переключать кодировку ... обычно. Но члены команды и системы хранилища исходного кода часто делают неправильные вещи. Кто-то еще приходит вместе с другим редактором, системой управления исходным кодом и т. Д. c ... и все, что связано с юникодом, запутано. Это также ломает различные инструменты. Я видел, как это происходит слишком много раз.
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 !");