c – 在Qt应用程序菜单栏的主菜单中添加和本地化菜单项

c – 在Qt应用程序菜单栏的主菜单中添加和本地化菜单项,第1张

概述首先,这里是Evernote菜单的截图,用法语本地化: [] 如您所见,主菜单中的所有菜单项(通过主菜单,我的意思是名称为应用程序名称的菜单项,如此处为Evernote)均使用法语进行本地化. Evernote应用程序本身带来了许多菜单项,例如ÉvaluezEvernotepour Mac(适用于Mac的费率Evernote),Information du compte …(帐户信息…)等.另外还 首先,这里是Evernote菜单的截图,用法语本地化:

[]

如您所见,主菜单中的所有菜单项(通过主菜单,我的意思是名称为应用程序名称的菜单项,如此处为Evernote)均使用法语进行本地化. Evernote应用程序本身带来了许多菜单项,例如ÉvaluezEvernotepour Mac(适用于Mac的费率Evernote),information du compte …(帐户信息…)等.另外还有标准的OS X提供的菜单Quit Evernote,Preferences等物品也是本地化的.

我的问题:

>如何在此主菜单中添加新项目?如何访问此菜单添加项目?
>我如何根据我的应用本地化来本地化这些项目,OS X提供的默认项目和我添加的项目?
>在Evernote菜单中,除了“服务”菜单选项外,所有内容似乎都已本地化(但子菜单选项已本地化!)?这不能也是本地化的吗?

我尝试过的:

fMenubar = fMainWindow->menubar();fMenufile = fMenubar->addMenu(QObject::tr(qPrintable(String_Class::fileMenu))); //"file" in English,translated into other languagesfAboutAppAct = new QAction(QObject::tr(qPrintable(String_Class::About_App)),fMainWindow); //prints "About App",localized in all languagesfMenufile->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 thisvoID 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 :("));    }}

我希望它有所帮助.

总结

以上是内存溢出为你收集整理的c – 在Qt应用程序菜单栏的主菜单中添加和本地化菜单项全部内容,希望文章能够帮你解决c – 在Qt应用程序菜单栏的主菜单中添加和本地化菜单项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存