是否有一种标准机制可以在Qt中设置依赖于语言的图标。 如果没有,这是否有效,是否安全:
MyWidget->setIcon(QPixmap(dir.currentPath() + tr("/images/icon_en.png") ));
//icon_en should be translated according to corresponding image names
答案 0 :(得分:1)
根据Qt中的语言环境,没有标准的设置图标的机制。然而,编写自己的机制非常简单。
IMO,在您的代码中使用tr
是多余的。这种方式更灵活:
// Get current system locale:
const QString LOCALE = QLocale::system().name(); // For example, result is "en_US"
// Extract language code from the previously obtained locale:
const QString LANG = LOCALE.split('_').at(0); // Result is "en"
// Path to our icons:
const QString PATH = QString(QApplication::applicationDirPath() + "/images");
// Build the path to the icon file:
const QString ICON = QString("%1/icon_%2.png").arg(PATH, LANG);
// Check if the icon for the current locale exists:
if (QFile::exists(ICON)) {
// Set this icon for our window:
setWindowIcon(QPixmap(ICON));
}
else {
// Otherwise fallback to the default icon:
setWindowIcon(QPixmap(PATH + "/icon_default.png"));
}
通常,您发布的技术是正确的。您的代码只有几点评论:
QDir::currentPath()
不会返回可执行文件目录;它返回当前的工作目录。请改用QApplication::applicationDirPath()
。答案 1 :(得分:1)
您可以从资源文件中加载图标。
然后,您可以在资源文件中为特定语言指定别名:
<qresource>
<file>cut.jpg</file>
</qresource>
<qresource lang="fr">
<file alias="cur.jpg">cut_fr.jpg</file>
<qresource>
这样,当应用程序自动切换为法语时,便会选择别名图标。