Spec-Zone.ru › Qt

Класс 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, к строке меню добавляются QMenus, а к выпадающим меню добавляются QActions.

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

    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 для приложения. Явное задание этого свойства переопределяет наличие (или отсутствие) атрибута.

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

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 , если в заданной позиции нет действия или если в указанном месте находится разделитель.

См. также 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.

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

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

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

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

Spec-Zone.ru

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