Spec-Zone.ru › Qt 5.14

Класс 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().

END_OF_DOCUMENT_MARKER

Виджеты можно добавить в меню, используя экземпляры класса 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(0);

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

QAction *QMenuBar::addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)

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

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

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

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

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

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

Spec-Zone.ru

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