2015-10-06 2 views
0

Существует ли стандартный механизм для установки значков, зависящих от языка в Qt. Если нет, то это будет работать и было бы безопасно:Значок изменения в зависимости от языка в Qt

MyWidget->setIcon(QPixmap(dir.currentPath() + tr("/images/icon_en.png"))); 
//icon_en should be translated according to corresponding image names 
+0

вы можете получить язык из QtLocale, а затем преобразовать его в строку с 'languageToString'. в вашем файле/каталоге resoucrce, создайте папку для каждого языка и заполните соответствующие значки. используйте строку langauge, чтобы найти правильный путь. http: //doc.qt.io/qt-4.8/qlocale.html#language –

ответ

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().
  • Вы также можете использовать Qt Resource System вместо хранения изображений вместе с исполняемым файлом.
+0

Спасибо, однако, это кажется более сложным и менее гибким, чем использование tr. С помощью tr-метода я мог бы, например, назначить один значок группе языков. Все равно спасибо ;-) –

Смежные вопросы