2014-12-24 2 views
1

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

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

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

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

QPushButton *button1 = new QPushButton(IMPORT) 

Также я загружаю новый переводчик так:

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

Из того, что я может понять, что мне нужно перезагрузить UI дополнительно:

controls.retranslateUi(this); 

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

ответ

2

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

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