Qt Mac(重新)在编辑菜单中移动“特殊字符...”操作

时间:2011-06-17 19:50:47

标签: qt macos menu special-characters edit

我正在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);
}

它提供了一个选项卡,可以使用这些功能将自己的操作添加到菜单中。

Special Characters Option in Edit Menu

2 个答案:

答案 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删除它们。