Spec-Zone.ru › Qt 5.15

Класс QMenuBar

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

Заголовок: #include <QMenuBar>
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)

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

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 or preferences Меню приложения | Настройки Если эта запись не найдена, пункт «Настройки» будет отключён
quit or 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 для приложения. Явное задание этого свойства переопределяет присутствие (или отсутствие) атрибута.

Это свойство было введено в Qt 4.6.

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

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().

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().

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.

Примечание: Использование значения, отличного от 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.

[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.

Функция была добавлена в Qt 4.1.

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

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

Устанавливает заданный виджет widget, отображаемый слева от первого элемента меню или справа от последнего элемента меню, в зависимости от corner.

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

Примечание: Использование угла, отличного от 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).

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-5.15/qmenubar.html

Spec-Zone.ru

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