2013-02-08 161 views
5

我試圖通過將每種語言爲QMap<QString, QString>因此它可以在多個地方重新使用,以顯示我的Qt應用程序不同的語言字符串和整個應用程序放入不同的組合框。我通過 創建QMap喜歡這樣做,所以在CTOR:Unicode字符不顯示

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; 
} 

當應用程序運行時,我看到以下內容:

enter image description here

但是,如果我創建一個單獨的.ui文件並以相同的方式插入映射,我會看到以下內容(即使我包含此se parate對話框類到相同的應用程序),所以很明顯,沒有字體的問題,只要在App不知道如何呈現不同的字符集....但我無法弄清楚,爲什麼第一個將不渲染字符集?

誰能告訴我爲什麼第一次不工作,但第二個呢?我在下面顯示的兩個UI文件中檢查了設計器,並且它的語言環境設置爲'C,默認'。我似乎無法弄清楚還有哪些因素會導致第一個不能工作,第二個可以在同一個應用程序中工作。

感謝您的幫助!

其他測試對話框:

enter image description here

回答

1

你的代碼是正確的,但問題是,你的源文件中不能包含Unicode字符 - 顯然它是使用不同的編碼。

文件另​​存爲UTF-8,一切都應該努力!

enter image description here

+0

我相信現在所有的文件都保存爲UTF-8(雖然有沒有辦法檢查每個文件以及它的保存方式?)在Qt Creator-> Tools> Text Editor中,文件編碼設置爲UTF- 8現在。這些文件來自現有項目的svn,所以我不確定它們最初是如何保存的。我如何通過命令行(Unix)將它們轉換爲UTF-8? – Tim 2013-02-08 17:39:44

+0

這應該是工作,但它不工作在Ubuntu 12.04顯然 - 文件-i warning_accept_dialog.cpp warning_accept_dialog.cpp:文本/ 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文件-i warning_accept_dialog.cpp warning_accept_dialog.cpp:text/x-c; charset = us-ascii似乎沒有改變。我曾嘗試過幾次連擊,結果仍然相同。 – Tim 2013-02-08 18:18:11

+1

在QtCreator我試圖編輯 - >選擇Encoding->保存文件。仍然沒有顯示爲utf8。我發現我不得不添加新文件,複製/粘貼我的整個文件...並且新文件保存在utf8編碼下,並且終於奏效了! – Tim 2013-02-08 19:05:31

0

在第一屏幕截圖由組合框使用的字體是比在第二屏幕截圖大得多。我的猜測是,你已經改變了字體無論是在GUI設計或代碼和第二(工作)截圖使用默認字體。這可能是因爲當您更改字體大小時,您還將字體更改爲不包含所有必需的Unicode字符的字體。嘗試將組合框使用的字體更改爲其他內容。