Символы Unicode в приложении qt не отображаются

Я пытаюсь отображать разные языковые строки в своем приложении qt, вставляя каждый язык в QMap<QString, QString>, чтобы его можно было повторно использовать в нескольких местах и ​​помещать в разные поля со списком в приложении. Я делаю это, создавая QMap вот так в CTOR:

m_langMap.insert(QString::fromWCharArray(L"English"), "english");
m_langMap.insert(QString::fromWCharArray(L"Dansk"), "dansk");
m_langMap.insert(QString::fromWCharArray(L"Nederlands"), "dutch");
m_langMap.insert(QString::fromWCharArray(L"Čeština"), "czeck");
m_langMap.insert(QString::fromWCharArray(L"Slovenský"), "slovak");
m_langMap.insert(QString::fromWCharArray(L"Magyar"), "hungarian");
m_langMap.insert(QString::fromWCharArray(L"Român"), "romanian");
m_langMap.insert(QString::fromWCharArray(L"Latviešu"), "latvian");
m_langMap.insert(QString::fromWCharArray(L"Lietuvių"), "lithuanian");
m_langMap.insert(QString::fromWCharArray(L"Polski"), "polish");
m_langMap.insert(QString::fromWCharArray(L"Português"), "portuguese");
m_langMap.insert(QString::fromWCharArray(L"Español"), "spanish");
m_langMap.insert(QString::fromWCharArray(L"Français"), "french");
m_langMap.insert(QString::fromWCharArray(L"Italiano"), "italian");
m_langMap.insert(QString::fromWCharArray(L"Svenska"), "swedish");
m_langMap.insert(QString::fromWCharArray(L"Русский"), "russian");
m_langMap.insert(QString::fromWCharArray(L"Українська"), "ukranian");
m_langMap.insert(QString::fromWCharArray(L"Русский"), "russian");
m_langMap.insert(QString::fromWCharArray(L"中文"), "chinese");
m_langMap.insert(QString::fromWCharArray(L"日本語"), "japanese");

Затем я вставляю их в поле со списком:

QMap<QString, QString>::const_iterator it = m_langMap.begin();
while (it != m_langMap.end())
{
    ui->comboBox->addItem(it.key());
    ++it;
}

Когда приложение запускается, я вижу следующее:

введите здесь описание изображения

Однако, если я создам отдельный файл .ui и вставлю карту таким же образом, я увижу следующее (даже если я включу этот отдельный класс Dialog в то же приложение), поэтому очевидно, что проблемы со шрифтом нет, поскольку приложение не зная, как отображать различные наборы символов... но я не могу понять, почему первый не будет отображать наборы символов?

Может кто-нибудь сказать мне, почему первый не работает, а второй работает? Я проверил конструктор, и его языковой стандарт установлен на «C, по умолчанию» в обоих файлах пользовательского интерфейса, которые я показал ниже. Кажется, я не могу понять, что еще вызывает разницу в том, что первый не работает, а второй работает в одном и том же приложении.

Спасибо за любую помощь!

Другой тестовый диалог:

введите здесь описание изображения


person Tim    schedule 08.02.2013    source источник


Ответы (2)


Ваш код правильный, но проблема в том, что ваш исходный файл не может содержать символы Юникода - видимо, он использует другую кодировку.

Сохраните файл как UTF-8 и все должно работать!

введите здесь описание изображения

person Nemanja Boric    schedule 08.02.2013
comment
Я полагаю, что все файлы сохраняются как UTF-8 прямо сейчас (хотя есть ли способ проверить каждый файл и как он уже сохранен?) В Qt Creator->Tools>Text Editor кодировка файлов установлена ​​​​на UTF-8 прямо сейчас . Файлы пришли из svn из существующего проекта, поэтому я не уверен, как они были сохранены изначально. Как я могу преобразовать их в UTF-8 через командную строку (Unix)? - person Tim; 08.02.2013
comment
Это должно работать, однако, по-видимому, это не работает в Ubuntu 12.04 - file -i warning_accept_dialog.cpp warning_accept_dialog.cpp: text/x-c; charset=us-ascii 325 ubu /home/tim/work/src/GUI convmv --notest -fus-ascii -tutf8 warning_accept_dialog.cpp Ваша версия Perl содержит блох #37757 #49830 Готово! 326 ubu /home/tim/work/src/GUI file -i warning_accept_dialog.cpp warning_accept_dialog.cpp: text/x-c; charset=us-ascii, похоже, не изменился. Пробовал несколько комбинаций, результат тот же. - person Tim; 08.02.2013
comment
В QtCreator я попробовал Edit->Selected Encoding->Save File. Все еще не отображался как utf8. Я обнаружил, что мне нужно добавить новый файл, скопировать/вставить весь файл... и новый файл был сохранен в кодировке utf8, и, наконец, он заработал! - person Tim; 08.02.2013
comment
@ Тим Рад, что смог дать тебе пару советов :) - person Nemanja Boric; 08.02.2013

На первом снимке экрана шрифт, используемый полем со списком, намного больше, чем на втором снимке экрана. Я предполагаю, что вы изменили шрифт либо в дизайнере графического интерфейса, либо в коде, а на втором (рабочем) снимке экрана используется шрифт по умолчанию. Возможно, когда вы изменили размер шрифта, вы также изменили шрифт на что-то, что не содержит всех необходимых символов Unicode. Попробуйте изменить шрифт, используемый полем со списком, на что-то другое.

person Community    schedule 08.02.2013