Как ретранслировать динамически созданные виджеты?

Я хочу перезагрузить QTranslator в динамическом режиме, а затем повторно перевести динамически созданные виджеты со «статически прикрепленными метками».

например У меня есть статическая метка:

QString AutoplanWorkspace::IMPORT = QPushButton::tr("Import");

а затем я создаю динамический контроль с этой меткой:

QPushButton *button1 = new QPushButton(IMPORT)

Также я загружаю новый переводчик следующим образом:

  if (myTranslator.load("C:\\tr.qm")) {
    //myTranslator.setParent(parent);
    qApp->installTranslator(&myTranslator);
  }

Насколько я понимаю, мне нужно дополнительно перезагрузить пользовательский интерфейс:

controls.retranslateUi(this);

Но эта динамическая часть и статическое свойство также отсутствуют в Ui:: и, насколько я понимаю, не будут переведены автоматически. Как я могу перевести динамическую часть, динамически загружая другой переводчик?


person cnd    schedule 24.12.2014    source источник


Ответы (1)


В классе, содержащем кнопку, вы должны переопределить changeEvent и в нем поймать QEvent::LanguageChange. Там вы можете а) вызвать retranslateUi для динамического повторного перевода текстов из вашего файла .ui (что вы уже сделали) и б) также повторно перевести все строки, созданные вручную (например, с помощью button1->setText(tr("Import")). вы посмотрите на функцию retranslateUi, вы увидите, что автоматически сгенерированный файл пользовательского интерфейса также просто содержит повторные вызовы QApplication::translate для каждого набора текста в дизайнере Это, очевидно, не может быть сделано автоматически для строк, определенных вне .ui, поэтому вам всегда придется делать это вручную.

person Robert    schedule 24.12.2014