Qt Mac (Re)move "Special Characters..."编辑菜单中的操作

标签 qt macos menu special-characters edit

我正在 Qt 中开发一个应用程序,它经常重建其菜单。但是,当我们调用 clear() 并在菜单中重新添加我们想要的操作时,“特殊字符...”似乎保留在菜单中。有没有办法删除或将此操作移动到 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

最佳答案

这是 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"];
}

菜单删除器.h
#ifndef MENUDELETER_H_
#define MENUDELETER_H_

void deleteSpecialCharacters();

#endif

最后,在 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();
}

所以这就是让它完全消失的方法。但问题是,你真的想阻止用户在你的应用中输入特殊字符吗?

关于Qt Mac (Re)move "Special Characters..."编辑菜单中的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6391053/

相关文章:

c++ - 停止 QTextCursor::insertText() 修改 QTextDocument 滚动条范围

android - mac 上的 adb 无法识别 huawei ascend (m860)

javascript - 溢出和滚动?

java - 具有列 : Remove alternating background coloring for rows on Linux/Mac 的 SWT 树

android - 如何在 android api 级别 12 模拟器上获取选项菜单?

Python Tkinter - 在菜单中添加外部函数作为命令

c++ - 添加所需库后使用 TShark C++ 源文件剖析消息时 undefined reference

c++ - QT 中的应用程序-> 处理消息?

multithreading - 如何实现线程的频繁启动/停止(QThread)

ios - 可以强制 AVFoundation 播放本地 .ts 文件吗?