c – 在Qt应用程序菜单栏的主菜单中添加和本地化菜单项
首先,这里是Evernote菜单的截图,用法语本地化:
[] 如您所见,主菜单中的所有菜单项(通过主菜单,我的意思是名称为应用程序名称的菜单项,如此处为Evernote)均使用法语进行本地化. Evernote应用程序本身带来了许多菜单项,例如évaluezEvernotepour Mac(适用于Mac的费率Evernote),Information du compte …(帐户信息…)等.另外还有标准的OS X提供的菜单Quit Evernote,Preferences等物品也是本地化的. 我的问题: >如何在此主菜单中添加新项目?如何访问此菜单添加项目? 我尝试过的: fMenuBar = fMainWindow->menuBar(); fMenuFile = fMenuBar->addMenu(QObject::tr(qPrintable(String_Class::FileMenu))); //"File" in English,translated into other languages fAboutAppAct = new QAction(QObject::tr(qPrintable(String_Class::About_App)),fMainWindow); //prints "About App",localized in all languages fMenuFile->addAction(fAboutAppAct); fAboutAppAct->setMenuRole(QAction::AboutRole); //otherwise it sits with the other file menu options in the File menu //reset UI language slot,called whenver UI language is reset. It retranslates all strings in all menus,except this void AppMenu::reTranslateUISlot() { fAboutAppAct->setText(QObject::tr(qPrintable(String_Class::About_App))); } 解决方法
也许你可以在MainWindow或AppMenu中重新实现changeEvent.
void MainWindow::changeEvent(QEvent *event) { if (event->type() == QEvent::LanguageChange) { this->retranslateUi(this); quickStart->retranslateUi(quickStart); //etc... } else { QMainWindow::changeEvent(event); } } 您可以强制Widgets重新翻译自己.但是你需要先注册一些QTranslator. 例如,在MainWindow的构造函数中(或在某些配置对话框中),如果可以在运行时更改语言(我在软件中完成的操作): CustomizeOptionsDialog::CustomizeOptionsDialog(QWidget *parent) : QDialog(parent,Qt::Tool) { // Load the language of the application customTranslator.load(languages.value( SettingsPrivate::instance()->language()) ); // Translate standard buttons (OK,Cancel,...) defaultQtTranslator.load("qt_" + SettingsPrivate::instance()->language(),QLibraryInfo::location(QLibraryInfo::TranslationsPath)); QApplication::installTranslator(&customTranslator); QApplication::installTranslator(&defaultQtTranslator); } 其中language()返回“fr”,“gb”或“cs”(从选项中选择新语言时发出的信号初始化). /** Change language at runtime. */ void CustomizeOptionsDialog::changeLanguage(const QString &language) { QString lang = languages.value(language); SettingsPrivate *settings = SettingsPrivate::instance(); // If the language is successfully loaded,tells every widget that they need to be redisplayed if (!lang.isEmpty() && lang != settings->language() && customTranslator.load(lang)) { settings->setLanguage(language); defaultQtTranslator.load("qt_" + lang,QLibraryInfo::location(QLibraryInfo::TranslationsPath)); QApplication::installTranslator(&customTranslator); /// TODO: reload plugin UI QApplication::installTranslator(&defaultQtTranslator); } else { labelStatusLanguage->setText(tr("No translation is available for this language :(")); } } 我希望它有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |