Spec-Zone.ru › Qt 5.9

Класс QMenuBar

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

Заголовок: #include <QMenuBar>
qmake: QT += widgets
Наследуется от: QWidget
  • Список всех членов, включая унаследованные

Свойства

  • defaultUp : bool
  • nativeMenuBar : bool
  • 59 свойств унаследовано от QWidget
  • 1 свойство унаследовано от QObject

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

QMenuBar(QWidget *parent = Q_NULLPTR)
~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 * 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
  • 214 открытых функций унаследовано от QWidget
  • 32 открытых функции унаследовано от QObject
  • 14 открытых функций унаследовано от QPaintDevice

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

virtual void setVisible(bool visible) override
  • 19 открытых слотов унаследовано от QWidget
  • 1 открытый слот унаследовано от QObject

Сигналы

void hovered(QAction *action)
void triggered(QAction *action)
  • 3 сигнала унаследовано от QWidget
  • 2 сигнала унаследовано от QObject

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

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
  • 35 защищённых функций унаследовано от QWidget
  • 9 защищённых функций унаследовано от QObject
  • 1 защищённая функция унаследовано от QPaintDevice

Дополнительные унаследованные члены

  • 5 статических открытых членов унаследовано от QWidget
  • 11 статических открытых членов унаследовано от QObject
  • 1 защищённый слот унаследовано от QWidget

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

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

Панель меню состоит из списка выпадающих пунктов меню. Вы добавляете пункты меню с помощью 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(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 = Q_NULLPTR)

Конструирует панель меню с родителем parent.

QMenuBar::~QMenuBar()

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

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

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

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

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

Переопределено из QWidget::actionEvent().

QRect QMenuBar::actionGeometry(QAction *act) const

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

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

QAction *QMenuBar::activeAction() const

Возвращает QAction, который в настоящее время выделен. Возвращает null, если действие в настоящее время не выбрано.

См. также 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::addMenu(QMenu *menu)

Добавляет menu в панель меню. Возвращает menuAction() меню.

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

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

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

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

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

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

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

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

QAction *QMenuBar::addSeparator()

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

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

Переопределено из QWidget::changeEvent().

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)

Переопределено из QObject::event().

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

Переопределено из QObject::eventFilter().

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

Переопределено из QWidget::focusInEvent().

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

Переопределено из QWidget::focusOutEvent().

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

Переопределено из QWidget::heightForWidth().

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

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

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

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

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

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

Переопределено из QWidget::leaveEvent().

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

Переопределено из QWidget::minimumSizeHint().

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

Переопределено из QWidget::mouseMoveEvent().

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

Переопределено из QWidget::mousePressEvent().

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

Переопределено из QWidget::mouseReleaseEvent().

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

Переопределено из QWidget::paintEvent().

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

Переопределено из QWidget::resizeEvent().

void QMenuBar::setActiveAction(QAction *act)

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

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

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

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

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

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

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

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

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

Переопределено из QWidget::setVisible().

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

Переопределено из QWidget::sizeHint().

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

Переопределено из QObject::timerEvent().

NSMenu *QMenuBar::toNSMenu()

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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