我正在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);
}
它提供了一个选项卡,可以使用这些功能将自己的操作添加到菜单中。
答案 0 :(得分:7)
这是Mac OS X的一项功能,不容易被禁用。您会注意到Mac OS上几乎每个应用程序都有它。它由操作系统自动添加到“编辑”菜单中,以允许输入国际字符。
从您的问题看来,但不是很清楚,当您最初创建“编辑”菜单时,“特殊字符...”菜单项最初是最后一个菜单项,但是成为第一个菜单项{{1已被调用。您可以选择一条路线而不是editMenu->clear()
菜单,您可以clear()
菜单并完全重新创建它们。但是,您的编辑菜单看起来非常静态。也许它根本不需要重新创建。
现在,那说,如果你真的确定你需要摆脱这个菜单项,有几种方法可以实现这一点。
第一个也是最不可取的一个就是没有“编辑”菜单。如果没有标题为“编辑”的菜单,Mac OS将不会添加“特殊字符”菜单项。
第二种方法需要一些特定于平台的Objective-C代码。显然,这应该只在Mac OS上的项目中构建。
MenuDeleter.m:
delete
MenuDeleter.h
#include <Foundation/NSUserDefaults.h>
void deleteSpecialCharacters()
{
[[NSUserDefaults standardUserDefaults]
setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"];
}
最后,在main.cpp中:
#ifndef MENUDELETER_H_
#define MENUDELETER_H_
void deleteSpecialCharacters();
#endif
这就是如何让它彻底消失。但问题是,您真的想阻止用户在您的应用中输入特殊字符吗?
答案 1 :(得分:0)
这个答案可能更适用于COCOA OSX应用程序,但我能够通过在applicationDidFinishLaunching函数中获取编辑菜单本身的NSMenu句柄来删除Objective-C中的这些菜单项,循环遍历itemArray中的NSMenuItems并通过调用removeItem删除它们。