2013-02-08 18 views
5

Próbuję wyświetlać różne ciągi językowe w mojej aplikacji qt, wstawiając każdy język do QMap<QString, QString>, aby można go było ponownie użyć w kilku miejscach i umieścić w różnych polach kombi w całej aplikacji . Robię to przez tworzenia QMap podobnie jak w konstruktor:Znaki Unicode w aplikacji qt nie wyświetlają się

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"); 

Następnie wstawić je do pola kombi:

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

Kiedy biegnie aplikacji, widzę następujące:

enter image description here

Jeśli jednak utworzę oddzielny plik .ui i wstawię mapę w ten sam sposób, widzę następujące elementy (nawet jeśli uwzględnię to jako parate klasy Dialog do tej samej aplikacji), więc wyraźnie nie ma problemu z czcionką, o ile aplikacja nie wie, jak renderować różne zestawy znaków ... ale nie mogę zrozumieć, dlaczego pierwszy nie renderuje zestawów znaków ?

Czy ktoś może mi powiedzieć, dlaczego pierwszy nie działa, a drugi nie? Sprawdziłem Designer i jego Locale jest ustawione na "C, Default" w obu plikach UI, które pokazałem poniżej. Nie mogę się zorientować, co jeszcze powoduje różnicę, ponieważ pierwsza nie działa, a druga działa w tej samej aplikacji.

Dzięki za pomoc!

Drugi Dialog Test:

enter image description here

Odpowiedz

1

Twój kod jest poprawny, ale problemem jest to, że plik źródłowy nie może zawierać znaków Unicode - podobno używa innego kodowania.

Zapisz plik jako UTF-8 i wszystko powinno działać!

enter image description here

+0

Wierzę, że wszystkie pliki są teraz zapisywane jako UTF-8 (mimo że istnieje sposób sprawdzenia każdego pliku i jak został już zapisany?) W Qt Creator-> Narzędzia> Edytor tekstu, kodowanie plików jest ustawione na UTF- 8 właśnie teraz. Pliki pochodzą z svn z istniejącego projektu, więc nie jestem pewien, w jaki sposób zostały pierwotnie zapisane. Jak mogę przekonwertować je na UTF-8 za pomocą wiersza poleceń (Unix)? – Tim

+0

To ma działać, ale najwyraźniej nie działa na Ubuntu 12.04 - plik -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 Twoja wersja Perla ma pchle # 37757 # 49830 Gotowy! 326 ubu/home/tim/work/src/plik GUI -i warning_accept_dialog.cpp warning_accept_dialog.cpp: text/x-c; charset = us-ascii nie zmieniło się. Spróbowałem kilku combosów i wciąż osiągałem ten sam rezultat. – Tim

+1

W QtCreator próbowałem Edit-> Selected Encoding-> Save File. Nadal nie pojawił się jako utf8. Zauważyłem, że muszę dodać nowy plik, skopiować/wkleić cały mój plik ...a nowy plik został zapisany pod kodowaniem utf8 i nareszcie działał! – Tim

0

W pierwszym zrzucie czcionka używana przez combobox jest znacznie większa niż w drugim zrzucie ekranu. Domyślam się, że zmieniłeś czcionkę w graficznym interfejsie użytkownika lub w kodzie, a drugi (działający) zrzut ekranu używa domyślnej czcionki. Możliwe, że po zmianie rozmiaru czcionki zmieniłeś czcionkę na coś, co nie zawiera wszystkich wymaganych znaków Unicode. Spróbuj zmienić czcionkę używaną przez combobox na coś innego.

Powiązane problemy