Qt Mac (Re) переместить действие «Специальные символы ...» в меню «Правка» - PullRequest
3 голосов
/ 17 июня 2011

Я занимаюсь разработкой приложения в 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

Ответы [ 2 ]

7 голосов
/ 18 июня 2011

Это особенность 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

И, наконец, в основном.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();
}

Так вот, как заставить его полностью исчезнуть.Но вопрос в том, действительно ли вы хотите запретить пользователю вводить специальные символы в ваше приложение?

0 голосов
/ 27 января 2014

Этот ответ может быть более применим к приложению COCOA OSX, но я смог удалить эти пункты меню в Objective-C, получив дескриптор NSMenu для самого меню редактирования в функции applicationDidFinishLaunching, зацикливая NSMenuItems в itemArrayи удалив их, вызвав removeItem.

...