qmap unicode qstring не работает

Я пытаюсь использовать сопоставление имен языков с именами локальных файлов, например:

QMap<QString, QString> map;
map.insert("Русский", "russian");

Но когда я выгружаю значения, получается ноль:

QMap<QString, QString>::const_iterator it = map.begin();
while (it != map.end())
{
    qDebug() << "Language: " << it.key();
    ++it;
}

Language: ""

Я попытался установить QTextCodec следующим образом:

QTextCodec * codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
m_langMap.insert(codec->fromUnicode("Русский"), "russian");

Тем не менее, результаты такие же. Что я здесь делаю не так? Мне действительно нужна эта карта для использования в нескольких местах без репликации кода.

Спасибо

== РЕДАКТИРОВАТЬ ==

Извините, я думал, что редактирую свое собственное. Вот нерабочий код, примерно идентичный тому короткому образцу, который я сделал, который работает. Рабочий файл - это файл гораздо большего размера.

в CTOR:

m_ui->setupUi(this);

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())
{
    m_form.language_combo->addItem(it.key());
    ++it;
}

== РЕДАКТИРОВАТЬ 2 ===

Я создал здесь новый вопрос:

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


person Tim    schedule 04.02.2013    source источник
comment
Не забудьте сохранить исходный файл как UTF-8 или кодовую страницу 1251. У меня это работает, если я сохраню исходный файл в кодировке 1251 (Windows Cyrillic).   -  person Nemanja Boric    schedule 05.02.2013


Ответы (1)


Это работает:

map.insert(QString::fromWCharArray(L"Русский"), "russian");

Изменить:

Использование QStringList тоже работает:

QStringList sl;
sl << QString::fromWCharArray(L"Русский")
   << QString::fromWCharArray(L"English")
   << QString::fromWCharArray(L"日本語");
ui->comboBox->addItems(sl);
person Community    schedule 04.02.2013
comment
Спасибо, Року, что там делает L? И есть ли способ распечатать его с помощью qDebug ()? Спасибо за вашу помощь! - person Tim; 05.02.2013
comment
Вам необходимо установить кодовую страницу для командной строки с помощью команды chcp. - person Nemanja Boric; 05.02.2013
comment
Также stackoverflow.com/questions/1810343/ - person Nemanja Boric; 05.02.2013
comment
Хорошо, я все еще не нашел ответа на этот вопрос. Я использую машину Linux. После того, как я вставил его в карту, мне нужно добавить его в поле со списком, и это не работает (не выходит, как ожидалось). Как мне это сделать? - person Tim; 05.02.2013
comment
Это работает на моем компьютере с Linux: ui->comboBox->addItem(QString::fromWCharArray(L"Русский")); Сохранен ли файл исходного кода с использованием кодировки UTF-8? - person ; 05.02.2013
comment
да. Очень странно. Я установил еще один небольшой проект qt, чтобы проверить это и определенно UTF-8. Моя спецификация UTF-8 - «сохранить, если уже есть», те же результаты, я получаю пустые записи. - person Tim; 05.02.2013
comment
да ладно, я пытался сделать QStringList, вставляя их. Оказывается, вставка их напрямую работает. Есть ли способ использовать QStringList для их перебора? - person Tim; 05.02.2013
comment
Спецификация не должна иметь значения в кодировке UTF-8. QStringList у меня отлично работает, я отредактировал ответ для этого. Может стоит показать свой нерабочий код. - person ; 05.02.2013
comment
Лучше добавить дополнительную информацию к вашему вопросу, чем к моему ответу. - person ; 06.02.2013