bet*_*eta 3 macos qt menu edit special-characters
我正在开发一个Qt中的应用程序,它经常重建它的菜单.但是,当我们调用clear()并在菜单中重新添加我们想要的操作时,"Special Characters ..."似乎仍保留在菜单中.有没有办法删除或将此操作移动到QMenu的底部?
以下是重建菜单的代码:
void MainWindow::initMenus(Tab* tab)
{
menuBar()->clear();
menuFile->clear();
menuEdit->clear();
menuSettings->clear();
menuHelp->clear();
ui_toolBar->clear();
menuBar()->addMenu(menuFile);
menuBar()->addMenu(menuEdit);
menuFile->addAction(actionNew);
menuFile->addAction(actionOpen);
if(tab) tab->addActionsFile(menuFile);
menuFile->addSeparator();
menuFile->addAction(actionNext);
menuFile->addAction(actionPrevious);
menuFile->addAction(actionClose);
menuFile->addSeparator();
menuFile->addAction(actionQuit);
if(tab) {
tab->addActionsEdit(menuEdit);
menuEdit->addSeparator();
tab->addActionsHelp(menuHelp);
menuHelp->addSeparator();
}
menuEdit->addAction(actionEditor_Settings);
menuHelp->addSeparator();
menuHelp->addAction(actionAbout);
if(tab) tab->addOtherActions(menuBar());
menuBar()->addMenu(menuHelp);
ui_toolBar->addAction(actionNew);
ui_toolBar->addAction(actionOpen);
if(tab) tab->addToolbarActions(ui_toolBar);
}
Run Code Online (Sandbox Code Playgroud)
它提供了一个选项卡,可以使用这些功能将自己的操作添加到菜单中.

这是Mac OS X的一项功能,不容易被禁用.您会注意到Mac OS上几乎每个应用程序都有它.它会由操作系统自动添加到"编辑"菜单中,以允许输入国际字符.
从您的问题看来,但不是很清楚,当您最初创建"编辑"菜单时,"特殊字符..."菜单项最初是最后一个菜单项,但成为第一个editMenu->clear()调用的菜单项.您可以选择的一条路线是clear()菜单,而不是菜单,您可以delete完全重新创建它们.但是,您的编辑菜单看起来非常静态.也许它根本不需要重新创建.
现在,那就是说,如果你真的确定你需要摆脱这个菜单项,有几种方法可以实现这一点.
第一个也是最不可取的一个就是没有"编辑"菜单.如果没有标题为"编辑"的菜单,Mac OS将不会添加"特殊字符"菜单项.
第二种方法需要一些特定于平台的Objective-C代码.显然,这应该只在Mac OS的项目中构建.
MenuDeleter.m:
#include <Foundation/NSUserDefaults.h>
void deleteSpecialCharacters()
{
[[NSUserDefaults standardUserDefaults]
setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"];
}
Run Code Online (Sandbox Code Playgroud)
MenuDeleter.h
#ifndef MENUDELETER_H_
#define MENUDELETER_H_
void deleteSpecialCharacters();
#endif
Run Code Online (Sandbox Code Playgroud)
最后,在main.cpp中:
#include <QApplicaiton>
#include "MenuDeleter.h"
int main(int argc, char **argv)
{
#ifdef Q_OS_MAC
deleteSpecialCharacters();
#endif
QApplication app(argc, argv);
....
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
这就是如何让它完全消失.但问题是,您真的想阻止用户在您的应用中输入特殊字符吗?