Spec-Zone.ru › Qt 6.0

Класс QMenuBar

Класс QMenuBar предоставляет горизонтальную строку меню. Подробнее...

Заголовок: #include <QMenuBar>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследуется от: QWidget
  • Список всех членов, включая наследуемые

Свойства

  • defaultUp : bool
  • nativeMenuBar : bool

Открытые функции

QMenuBar(QWidget *parent = nullptr)
virtual ~QMenuBar()
QAction * actionAt(const QPoint &pt) const
QRect actionGeometry(QAction *act) const
QAction * activeAction() const
QAction * addAction(const QString &text)
QAction * addAction(const QString &text, const QObject *receiver, const char *member)
QAction * addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
QAction * addAction(const QString &text, Functor functor)
QAction * addMenu(QMenu *menu)
QMenu * addMenu(const QString &title)
QMenu * addMenu(const QIcon &icon, const QString &title)
QAction * addSeparator()
void clear()
QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
QAction * insertMenu(QAction *before, QMenu *menu)
QAction * insertSeparator(QAction *before)
bool isDefaultUp() const
bool isNativeMenuBar() const
void setActiveAction(QAction *act)
void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
void setDefaultUp(bool)
void setNativeMenuBar(bool nativeMenuBar)
NSMenu * toNSMenu()

Переопределённые открытые функции

virtual int heightForWidth(int) const override
virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

Открытые слоты

virtual void setVisible(bool visible) override

Сигналы

void hovered(QAction *action)
void triggered(QAction *action)

Защищённые функции

virtual void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

Переопределённые защищённые функции

virtual void actionEvent(QActionEvent *e) override
virtual void changeEvent(QEvent *e) override
virtual bool event(QEvent *e) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void focusInEvent(QFocusEvent *) override
virtual void focusOutEvent(QFocusEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void leaveEvent(QEvent *) override
virtual void mouseMoveEvent(QMouseEvent *e) override
virtual void mousePressEvent(QMouseEvent *e) override
virtual void mouseReleaseEvent(QMouseEvent *e) override
virtual void paintEvent(QPaintEvent *e) override
virtual void resizeEvent(QResizeEvent *) override
virtual void timerEvent(QTimerEvent *e) override

Подробное описание

Панель меню состоит из списка раскрывающихся пунктов меню. Вы добавляете пункты меню с помощью addMenu(). Например, предполагая, что menubar является указателем на QMenuBar, а fileMenu — указателем на QMenu, следующее утверждение вставляет меню в панель меню:

menubar->addMenu(fileMenu);

Символ амперсанда в тексте пункта меню задаёт сочетание клавиш Alt+F для этого меню. (Можно использовать "&&" для отображения реального амперсанда в панели меню.)

Нет необходимости в расположении панели меню. Она автоматически устанавливает свою геометрию в верхней части родительского виджета и соответственно изменяет её при каждом изменении размера родительского виджета.

Использование

В большинстве приложений с главным окном вы бы использовали функцию menuBar(), предоставляемую классом QMainWindow, добавляя QMenu к панели меню и добавляя QAction к всплывающим меню.

Пример (из примера Меню):

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);

Элементы меню можно удалить с помощью removeAction().

Виджеты можно добавлять в меню, используя экземпляры класса QWidgetAction для их хранения. Эти действия затем можно вставлять в меню обычным способом; для получения более подробной информации см. документацию по QMenu.

Зависимость от платформы внешнего вида и поведения

Разные платформы имеют разные требования к внешнему виду панелей меню и их поведению при взаимодействии с пользователем. Например, системы Windows часто настраиваются таким образом, что подчёркнутые символы-мнемоники, указывающие на сочетания клавиш для элементов в панели меню, отображаются только при нажатии клавиши Alt.

QMenuBar как глобальная панель меню

В macOS и в определённых средах рабочего стола Linux, таких как Ubuntu Unity, QMenuBar является оболочкой для использования глобальной панели меню. Если у вас несколько панелей меню в одном диалоговом окне, то внешняя панель меню (обычно внутри виджета с флагом виджета Qt::Window) будет использоваться для глобальной панели меню.

Qt для macOS также предоставляет функцию слияния панелей меню, чтобы QMenuBar соответствовала общепринятой структуре панели меню macOS. Функциональность слияния основана на сопоставлении строк с названием записи QMenu. Эти строки переводятся (с помощью QObject::tr()) в контексте «QMenuBar». Если запись перемещена, её слоты всё равно будут срабатывать так, как если бы она находилась на первоначальном месте. Таблица ниже описывает искомые строки и место размещения записи, если совпадение найдено:

Совпадение строки Расположение Примечания
about.* Меню приложения | О программе <название приложения> Название приложения извлекается из файла Info.plist (см. примечание ниже). Если эта запись не найдена, элемент «О программе» не будет отображаться в меню приложения.
config, options, setup, settings или preferences Меню приложения | Настройки Если эта запись не найдена, элемент «Настройки» будет отключён
quit или exit Меню приложения | Выход <название приложения> Если эта запись не найдена, будет создан стандартный элемент «Выход», который вызовет QCoreApplication::quit()

Вы можете переопределить это поведение, используя свойство QAction::menuRole().

Если вы хотите, чтобы все окна приложения Mac использовали одну панель меню, вы должны создать панель меню без родителя. Создайте панель меню без родителя так:

QMenuBar *menuBar = new QMenuBar(nullptr);

Примечание: не используйте QMainWindow::menuBar() для создания общей панели меню, потому что эта панель меню будет иметь QMainWindow в качестве родителя. Эта панель меню будет отображаться только для родительского QMainWindow.

Примечание: Текст, используемый для названия приложения в панели меню macOS, извлекается из значения, заданного в файле Info.plist в пакете приложения. Для получения дополнительной информации см. Qt для macOS — Развёртывание.

Примечание: В Linux, если служба com.canonical.AppMenu.Registrar доступна на сеансовом шине D-Bus, Qt будет взаимодействовать с ней для установки меню приложения в глобальную панель меню, как описано.

Примеры

Пример Меню демонстрирует использование QMenuBar и QMenu. Другие примеры приложений главного окна также используют эти классы для меню.

См. также QMenu, QShortcut, QAction, Введение в Руководство по принципам интерфейса пользователя Apple, Справочник по проектированию графического интерфейса пользователя: Панель меню и Пример меню.

Документация свойств

defaultUp : bool

Это свойство содержит ориентацию всплывающего меню

Стандартная ориентация всплывающего меню. По умолчанию меню всплывает «вниз» по экрану. Установив свойство в true, меню будет всплывать «вверх». Вы можете использовать это для меню, которые находятся ниже документа, к которому они относятся.

Если меню не помещается на экране, другая ориентация используется автоматически.

Функции доступа:

bool isDefaultUp() const
void setDefaultUp(bool)

nativeMenuBar : bool

Это свойство указывает, будет ли использоваться панель меню как родная на платформах, которые её поддерживают

Это свойство определяет, будет ли панель меню использоваться как родная панель меню на платформах, которые её поддерживают. В настоящее время поддерживаются macOS и рабочие столы Linux, использующие интерфейс D-Bus com.canonical.dbusmenu (например, Ubuntu Unity). Если это свойство true, панель меню используется в качестве родной и не находится в окне своего родителя; если false, панель меню остаётся в окне. На других платформах установка этого атрибута не оказывает влияния, и чтение этого атрибута всегда вернёт false.

По умолчанию используется значение, соответствующее установке атрибута Qt::AA_DontUseNativeMenuBar для приложения. Явное задание этого свойства переопределяет наличие (или отсутствие) атрибута.

Функции доступа:

bool isNativeMenuBar() const
void setNativeMenuBar(bool nativeMenuBar)

Документация функций-членов

QMenuBar::QMenuBar(QWidget *parent = nullptr)

Создаёт панель меню с родителем parent.

[signal] void QMenuBar::hovered(QAction *action)

Этот сигнал генерируется, когда выделено действие меню; action — действие, вызвавшее событие.

Часто это используется для обновления статусной информации.

См. также triggered() и QAction::hovered().

[override virtual slot] void QMenuBar::setVisible(bool visible)

Реализует функцию доступа к свойству: QWidget::visible.

[signal] void QMenuBar::triggered(QAction *action)

Этот сигнал генерируется, когда действие в меню, принадлежащем этой панели меню, активируется в результате щелчка мыши; action — действие, вызвавшее сигнал.

Примечание: QMenuBar должен владеть QMenu для работы этого сигнала.

Обычно каждое действие меню подключается к одному слоту с помощью QAction::triggered(), но иногда вам понадобится подключить несколько элементов к одному слоту (чаще всего, если пользователь выбирает из массива). Этот сигнал полезен в таких случаях.

См. также hovered() и QAction::triggered().

[virtual] QMenuBar::~QMenuBar()

Удаляет панель меню.

QAction *QMenuBar::actionAt(const QPoint &pt) const

Возвращает QAction в позиции pt. Возвращает nullptr , если в позиции pt нет действия или в этой позиции находится разделитель.

См. также addAction() и addSeparator().

[override virtual protected] void QMenuBar::actionEvent(QActionEvent *e)

Переопределяет: QWidget::actionEvent(QActionEvent *event).

QRect QMenuBar::actionGeometry(QAction *act) const

Возвращает геометрию действия act в виде QRect.

См. также actionAt().

QAction *QMenuBar::activeAction() const

Возвращает QAction, который в данный момент выделен, если есть, иначе nullptr.

См. также setActiveAction().

QAction *QMenuBar::addAction(const QString &text)

Эта функция-удобство создаёт новое действие с текстом text. Функция добавляет созданное действие в список действий меню и возвращает его.

См. также QWidget::addAction() и QWidget::actions().

QAction *QMenuBar::addAction(const QString &text, const QObject *receiver, const char *member)

Это перегруженная функция.

Эта функция-удобство создаёт новое действие с заданным текстом text. Сигнал triggered() действия подключается к слоту member объекта receiver. Функция добавляет созданное действие в список действий меню и возвращает его.

См. также QWidget::addAction() и QWidget::actions().

[since 5.11] template <typename Obj, typename PointerToMemberFunctionOrFunctor> QAction *QMenuBar::addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)

Это перегруженный метод.

Эта функция-помощник создаёт новое действие с заданным значением text. Сигнал triggered() действия подключается к методу method объекта receiver. Функция добавляет созданное действие в список действий меню и возвращает его.

QMenuBar берёт во владение возвращённое QAction.

Эта функция была добавлена в Qt 5.11.

См. также QWidget::addAction() и QWidget::actions().

[since 5.11] template <typename Functor> QAction *QMenuBar::addAction(const QString &text, Functor functor)

Это перегруженный метод.

Эта функция-помощник создаёт новое действие с заданным значением text. Сигнал triggered() действия подключается к functor. Функция добавляет созданное действие в список действий меню и возвращает его.

QMenuBar берёт во владение возвращённое QAction.

Эта функция была добавлена в Qt 5.11.

См. также QWidget::addAction() и QWidget::actions().

QAction *QMenuBar::addMenu(QMenu *menu)

Добавляет menu в строку меню. Возвращает menuAction() меню. Строка меню не берёт во владение меню.

Примечание: Возвращаемый объект QAction может использоваться для скрытия соответствующего меню.

См. также QWidget::addAction() и QMenu::menuAction().

QMenu *QMenuBar::addMenu(const QString &title)

Добавляет новое QMenu с названием title в строку меню. Строка меню берёт во владение меню. Возвращает созданное меню.

См. также QWidget::addAction() и QMenu::menuAction().

QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title)

Добавляет новое QMenu с иконкой icon и названием title в строку меню. Строка меню берёт во владение меню. Возвращает созданное меню.

См. также QWidget::addAction() и QMenu::menuAction().

QAction *QMenuBar::addSeparator()

Добавляет разделитель в меню.

[override virtual protected] void QMenuBar::changeEvent(QEvent *e)

Переопределяет: QWidget::changeEvent(QEvent *event).

void QMenuBar::clear()

Удаляет все действия из строки меню.

Примечание: В macOS элементы меню, которые были объединены в системное меню, не удаляются этой функцией. Один из способов решения этой проблемы — удалить дополнительные действия самостоятельно. Можно установить роль меню для разных меню, чтобы заранее знать, какие элементы меню будут объединены, а какие нет. Затем самостоятельно решить, что пересоздавать, а что удалять.

См. также removeAction().

QWidget *QMenuBar::cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const

Возвращает виджет слева от первого или справа от последнего элемента меню, в зависимости от corner.

Примечание: Использование значения corner отличного от Qt::TopRightCorner или Qt::TopLeftCorner приведёт к предупреждению.

См. также setCornerWidget().

[override virtual protected] bool QMenuBar::event(QEvent *e)

Переопределяет: QWidget::event(QEvent *event).

[override virtual protected] bool QMenuBar::eventFilter(QObject *object, QEvent *event)

Переопределяет: QObject::eventFilter(QObject *watched, QEvent *event).

[override virtual protected] void QMenuBar::focusInEvent(QFocusEvent *)

Переопределяет: QWidget::focusInEvent(QFocusEvent *event).

[override virtual protected] void QMenuBar::focusOutEvent(QFocusEvent *)

Переопределяет: QWidget::focusOutEvent(QFocusEvent *event).

[override virtual] int QMenuBar::heightForWidth(int) const

Переопределяет: QWidget::heightForWidth(int w) const.

[virtual protected] void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

Инициализирует option значениями из строки меню и информацией из action. Этот метод полезен для подклассов, когда им нужен QStyleOptionMenuItem, но они не хотят сами заполнять всю информацию.

См. также QStyleOption::initFrom() и QMenu::initStyleOption().

QAction *QMenuBar::insertMenu(QAction *before, QMenu *menu)

Вставляет menu перед действием before и возвращает menuAction() меню.

См. также QWidget::insertAction() и addMenu().

QAction *QMenuBar::insertSeparator(QAction *before)

Создаёт новое действие-разделитель, т.е. действие, для которого QAction::isSeparator() возвращает true. Функция вставляет созданное действие в список действий строки меню перед действием before и возвращает его.

См. также QWidget::insertAction() и addSeparator().

[override virtual protected] void QMenuBar::keyPressEvent(QKeyEvent *e)

Переопределяет: QWidget::keyPressEvent(QKeyEvent *event).

[override virtual protected] void QMenuBar::leaveEvent(QEvent *)

Переопределяет: QWidget::leaveEvent(QEvent *event).

[override virtual] QSize QMenuBar::minimumSizeHint() const

Переопределяет функцию-доступ к свойству: QWidget::minimumSizeHint.

[override virtual protected] void QMenuBar::mouseMoveEvent(QMouseEvent *e)

Переопределяет: QWidget::mouseMoveEvent(QMouseEvent *event).

[override virtual protected] void QMenuBar::mousePressEvent(QMouseEvent *e)

Переопределяет: QWidget::mousePressEvent(QMouseEvent *event).

[override virtual protected] void QMenuBar::mouseReleaseEvent(QMouseEvent *e)

Переопределяет: QWidget::mouseReleaseEvent(QMouseEvent *event).

[override virtual protected] void QMenuBar::paintEvent(QPaintEvent *e)

Переопределяет: QWidget::paintEvent(QPaintEvent *event).

[override virtual protected] void QMenuBar::resizeEvent(QResizeEvent *)

Переопределяет: QWidget::resizeEvent(QResizeEvent *event).

void QMenuBar::setActiveAction(QAction *act)

Устанавливает текущее выделенное действие в act.

См. также activeAction().

void QMenuBar::setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)

Это устанавливает заданный виджет для отображения непосредственно слева от первого пункта меню или справа от последнего пункта меню, в зависимости от угла.

Панель меню получает во владение виджет, переродив его в панель меню. Однако, если угол уже содержит виджет, этот предыдущий виджет больше не будет управляться и по-прежнему будет видимым дочерним элементом панели меню.

Примечание: Использование угла, отличного от Qt::TopRightCorner или Qt::TopLeftCorner, приведет к появлению предупреждения.

См. также cornerWidget().

[override virtual] QSize QMenuBar::sizeHint() const

Переопределяет функцию доступа к свойству: QWidget::sizeHint.

[override virtual protected] void QMenuBar::timerEvent(QTimerEvent *e)

Переопределяет: QObject::timerEvent(QTimerEvent *event).

[since 5.2] NSMenu *QMenuBar::toNSMenu()

Возвращает родной NSMenu для этой панели меню. Доступно только в macOS.

Примечание: Qt может установить делегата на родной панели меню. Если вам нужно установить собственного делегата, убедитесь, что вы сохранили исходный и перенаправили все вызовы к нему.

Эта функция была добавлена в Qt 5.2.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qmenubar.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API