Как перевести язык в Qt на лету
Я использую Translator и linguist для перевода языка в своем приложении в Qt symbain, но я хочу сделать это на лету (во время выполнения), я попробовал решение, данное сетью разработчиков, но оно не работает для меня
<code> #include "languagetranslator.h" #include "constants.h" #include <QSettings> #include <HelperClasses/Strings.h> #include <QTranslator> #include <AppStatus/appstatus.h> #include <QApplication> QTranslator* LanguageTranslator::current = 0; LanguageTranslator::LanguageTranslator(int& argc, char* argv[]) : QApplication(argc, argv) { } LanguageTranslator::~LanguageTranslator() { } void LanguageTranslator::loadTranslation() { QString language; language = AppStatus::getCurrentLanguage(); loadTranslation(language); qDebug("language from laodtranslation = %s",language.toLatin1().data()); //qDebug(language.toLatin1()); } void LanguageTranslator::loadTranslation(QString language) { //QApplication app; QTranslator* translator = new QTranslator(instance()); translator->load(language); installTranslator(&translator); //exec(); } </code>
Это работает только тогда, когда я объявил это в main.cpp и перезапустил приложение, я также вызываю этот метод после выбора нового языка, есть ли что-то, что мне не хватает. Я перехожу по следующей ссылкеhttp://www.qtcentre.org/wiki/index.php?title=Dynamic_translation_in_Qt4_applications
Нужно ли вызывать void MainWindow :: changeEvent (событие QEvent *) при установке нового языка
это мой метод changeEvent (), который я объявил в mainWindow, здесь я вызываю setLanguage ();
<code>void MainWindow::changeEvent(QEvent *event) { if(event->type() == QEvent::LanguageChange) { ui->retranslateUi(this); // retranslate(); setLanguage(); } QMainWindow::changeEvent(event); } void MainWindow::setLanguage() { QString myLanguage; int iIndex = AppStatus::getSettingsData().at(3); switch(iIndex) { case ENGLISH: myLanguage = "language_en"; break; case SPANISH: myLanguage = "language_es"; break; } AppStatus::saveCurrentLanguage(myLanguage); LanguageTranslator::loadTranslation(myLanguage); } </code>
из setLangauge () я звоню languageTranslator () Есть ли что-то, что мне не хватает; Это мой основной класс
<code>int main(int argc, char *argv[]) { LanguageTranslator app(argc, argv); QString lang = AppStatus::getCurrentLanguage(); app.installTranslator(&translator); MainWindow mainWindow; mainWindow.setOrientation(MainWindow::ScreenOrientationLockPortrait); //About mainWindow; #if defined(Q_OS_SYMBIAN) mainWindow.showMaximized(); #else mainWindow.show(); #endif // mainWindow.showFullScreen(); app.connect(&app,SIGNAL(lastWindowClosed()),&app,SLOT(quit())); return app.exec(); } </code>