我正在尝试通过将每种语言插入QMap<QString, QString>
来在我的qt应用中显示不同的语言字符串,以便可以在多个位置重复使用,并将其放入应用程序中的不同组合框中。我是这样做的
在CTOR中创建QMap
就像这样:
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类包含在同一个应用程序中),所以显然没有字体问题。应用程序不知道如何呈现不同的字符集....但我无法弄清楚为什么第一个不会渲染字符集?
有人可以告诉我为什么第一个不起作用但第二个不起作用?我检查了Designer,它的Locale在我下面显示的两个ui文件中设置为'C,Default'。我似乎无法弄清楚还有什么导致第一个不起作用的差异,第二个在同一个应用程序中工作。
感谢您的帮助!
另一个测试对话:
答案 0 :(得分:1)
您的代码是正确的,但问题是您的源文件不能包含Unicode字符 - 显然它使用的是不同的编码。
将文件保存为UTF-8,一切正常!
答案 1 :(得分:0)
在第一个屏幕截图中,组合框使用的字体比第二个屏幕截图中的字体大得多。我的猜测是你在GUI设计器或代码中更改了字体,第二个(工作)屏幕截图使用的是默认字体。可能是当您更改了字体大小时,您还将字体更改为不包含所有必需Unicode字符的字体。尝试将组合框使用的字体更改为其他字体。