gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:40 53 4
gpt4 key购买 nike

所以首先这里是 Evernote 的所述菜单的屏幕截图,已本地化为法语:

[ enter image description here ]

如您所见,主菜单中的所有菜单项(我所说的主菜单是指名称为应用程序名称的菜单项,如此处为 Evernote)均已本地化为法语。 Evernote 应用本身带有很多菜单项,例如 Évaluez Evernote pour Mac(Rate Evernote for Mac)、信息du compte...(Account Info...)等。另外还有标准的 OS X 提供的菜单项,例如 Quit EvernotePreferences 等也已本地化。

我的问题:

  1. 如何在此主菜单中添加新项目?如何访问此菜单以添加项目?
  2. 如何根据我的应用程序本地化来本地化这些项目,包括 OS X 提供的默认项目和我添加的项目?
  3. 在 Evernote 菜单中,除了 Services 菜单选项外,所有内容似乎都已本地化(但是子菜单选项已本地化!)?这也不能本地化吗?

我尝试过的:

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)));
}

最佳答案

也许您可以在 MainWindowAppMenu 中重新实现 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 应用程序菜单栏的主菜单中添加和本地化菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659097/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com