5

我试图通过将每种语言插入到 a 中来在我的 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 类包含到同一个应用程序中),所以很明显,只要应用程序没有字体问题知道如何渲染不同的字符集....但我不知道为什么第一个不会渲染字符集?

谁能告诉我为什么第一个不起作用,而第二个起作用?我检查了设计器,它的语言环境在下面显示的两个 ui 文件中都设置为“C,默认值”。我似乎无法弄清楚还有什么导致第一个不工作的差异,而第二个在同一个应用程序中工作。

谢谢你的帮助!

另一个测试对话框:

在此处输入图像描述

4

2 回答 2

1

您的代码是正确的,但问题是您的源文件不能包含 Unicode 字符 - 显然它使用不同的编码。

将文件另存为 UTF-8,一切正常!

在此处输入图像描述

于 2013-02-08T16:48:21.773 回答
0

在第一个屏幕截图中,组合框使用的字体比第二个屏幕截图大得多。我的猜测是您已经在 GUI 设计器或代码中更改了字体,而第二个(工作)屏幕截图使用的是默认字体。可能是当您更改字体大小时,您也将字体更改为不包含所有必需的 Unicode 字符的字体。尝试将组合框使用的字体更改为其他字体。

于 2013-02-08T16:57:34.937 回答