Qt Mac (Re) переместить действие "Специальные символы..." в меню "Правка"
Я занимаюсь разработкой приложения в 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);
}
Он снабжен вкладкой, которая также может добавлять свои собственные действия в меню, используя эти функции.
2 ответа
Это особенность 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"];
}
MenuDeleter.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();
}
Вот как это сделать, чтобы это полностью исчезло. Но вопрос в том, действительно ли вы хотите запретить пользователю вводить специальные символы в ваше приложение?
Этот ответ может быть более применим к приложению COCOA OSX, но я смог удалить эти пункты меню в Objective-C, получив дескриптор NSMenu для самого меню редактирования в функции applicationDidFinishLaunching, просматривая NSMenuItems в itemArray и удаляя их вызывая removeItem.