Класс QMenuBar
Класс QMenuBar предоставляет горизонтальную строку меню. Подробнее...
| Заголовок: | #include <QMenuBar> |
| qmake: | QT += widgets |
| Наследует: | QWidget |
Свойства
- defaultUp : bool
- nativeMenuBar : bool
Открытые функции
| 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 * | defaultAction() 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 | setDefaultAction(QAction *act) |
| void | setDefaultUp(bool) |
| void | setNativeMenuBar(bool nativeMenuBar) |
| NSMenu * | toNSMenu() |
Переопределенные открытые функции
| virtual int | heightForWidth(int) const |
| virtual QSize | minimumSizeHint() const |
| virtual QSize | sizeHint() const |
- 211 открытых функций унаследовано от QWidget
- 31 открытых функций унаследовано от QObject
- 14 открытых функций унаследовано от QPaintDevice
Открытые слоты
| virtual void | setVisible(bool visible) |
Сигналы
| void | hovered(QAction *action) |
| void | triggered(QAction *action) |
Статические открытые члены
| void | wceCommands(uint command) |
| void | wceRefresh() |
- 5 статических открытых членов унаследовано от QWidget
- 11 статических открытых членов унаследовано от QObject
Защищенные функции
| void | initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const |
Переопределенные защищенные функции
| virtual void | actionEvent(QActionEvent *e) |
| virtual void | changeEvent(QEvent *e) |
| virtual bool | event(QEvent *e) |
| virtual bool | eventFilter(QObject *object, QEvent *event) |
| virtual void | focusInEvent(QFocusEvent *) |
| virtual void | focusOutEvent(QFocusEvent *) |
| virtual void | keyPressEvent(QKeyEvent *e) |
| virtual void | leaveEvent(QEvent *) |
| virtual void | mouseMoveEvent(QMouseEvent *e) |
| virtual void | mousePressEvent(QMouseEvent *e) |
| virtual void | mouseReleaseEvent(QMouseEvent *e) |
| virtual void | paintEvent(QPaintEvent *e) |
| virtual void | resizeEvent(QResizeEvent *) |
| virtual void | timerEvent(QTimerEvent *e) |
- 35 защищённых функций, унаследованных от QWidget
- 9 защищённых функций, унаследованных от QObject
- 1 защищённая функция, унаследованная от QPaintDevice
Дополнительные унаследованные члены
- 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
QMenuBar на macOS — это оболочка для использования системной строки меню. Если у вас есть несколько строк меню в одном диалоговом окне, самая внешняя строка меню (обычно внутри виджета со флагом виджета 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.
Примечание: Текст, используемый для имени приложения в строке меню, получается из значения, установленного в файле Info.plist в пакете приложения. Дополнительную информацию см. в Qt для macOS — Развёртывание.
QMenuBar на Windows CE
QMenuBar на Windows CE — это оболочка для использования системной строки меню, аналогично macOS. Эта функция активирована для Windows Mobile и интегрирует QMenuBar с родными мягкими клавишами. Левая мягкая клавиша может управляться с помощью QMenuBar::setDefaultAction(), а правая мягкая клавиша может использоваться для доступа к строке меню.
Сигнал hovered() не поддерживается для интеграции родного меню. Также невозможно отобразить значок в родном меню на Windows Mobile.
Примеры
Пример Меню показывает, как использовать QMenuBar и QMenu. Другие примеры приложений с основным окном также используют меню с использованием этих классов.
См. также QMenu, QShortcut, QAction, Введение в Руководство по разработке пользовательского интерфейса Apple, Справочник по проектированию пользовательского интерфейса: Строка меню и Пример меню.
Документация по свойствам
defaultUp : bool
Это свойство содержит ориентацию всплывающего меню
Ориентация всплывающего меню по умолчанию. По умолчанию меню всплывают «вниз» по экрану. Установив свойство в true, меню будет всплывать «вверх». Вы можете это вызвать для меню, которые находятся *ниже* документа, к которому они относятся.
Если меню не помещается на экране, используется другая ориентация автоматически.
Функции доступа:
| bool | isDefaultUp() const |
| void | setDefaultUp(bool) |
nativeMenuBar : bool
Это свойство содержит значение, указывающее, будет ли строка меню использоваться как родная строка меню на платформах, которые её поддерживают
Это свойство указывает, следует ли использовать строку меню в качестве родной строки меню на платформах, которые её поддерживают. В настоящее время поддерживаются macOS и Windows CE. На этих платформах, если это свойство true, строка меню используется в родной строке меню и не находится в окне своего родителя; если 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().
[virtual protected] void QMenuBar::actionEvent(QActionEvent *e)
Переопределено из QWidget::actionEvent().
QRect QMenuBar::actionGeometry(QAction *act) const
Возвращает геометрию действия act как QRect.
См. также actionAt().
QAction *QMenuBar::activeAction() const
Возвращает QAction, который в данный момент выделен. Возвращает нулевой указатель, если сейчас не выбрано ни одного действия.
См. также setActiveAction().
QAction *QMenuBar::addAction(const QString &text)
Это перегруженная функция.
Эта вспомогательная функция создаёт новое действие с текстом text. Функция добавляет созданное действие в список действий меню и возвращает его.
См. также QWidget::addAction() и QWidget::actions().
QAction *QMenuBar::addAction(const QString &text, const QObject *receiver, const char *member)
Это перегруженная функция.
Эта вспомогательная функция создаёт новое действие с заданным текстом. Сигнал triggered() действия подключается к слоту члена получателя. Функция добавляет созданное действие в список действий меню и возвращает его.
См. также 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()
Добавляет разделитель в меню.
[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().
QAction *QMenuBar::defaultAction() const
Возвращает текущее действие по умолчанию.
Эта функция была добавлена в Qt 4.4.
См. также setDefaultAction().
[virtual protected] bool QMenuBar::event(QEvent *e)
Переопределено из QObject::event().
[virtual protected] bool QMenuBar::eventFilter(QObject *object, QEvent *event)
Переопределено из QObject::eventFilter().
[virtual protected] void QMenuBar::focusInEvent(QFocusEvent *)
Переопределено из QWidget::focusInEvent().
[virtual protected] void QMenuBar::focusOutEvent(QFocusEvent *)
Переопределено из QWidget::focusOutEvent().
[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().
[virtual protected] void QMenuBar::keyPressEvent(QKeyEvent *e)
Переопределено из QWidget::keyPressEvent().
[virtual protected] void QMenuBar::leaveEvent(QEvent *)
Переопределено из QWidget::leaveEvent().
[virtual] QSize QMenuBar::minimumSizeHint() const
Переопределено из QWidget::minimumSizeHint().
[virtual protected] void QMenuBar::mouseMoveEvent(QMouseEvent *e)
Переопределено из QWidget::mouseMoveEvent().
[virtual protected] void QMenuBar::mousePressEvent(QMouseEvent *e)
Переопределено из QWidget::mousePressEvent().
[virtual protected] void QMenuBar::mouseReleaseEvent(QMouseEvent *e)
Переопределено из QWidget::mouseReleaseEvent().
[virtual protected] void QMenuBar::paintEvent(QPaintEvent *e)
Переопределено из QWidget::paintEvent().
[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().
void QMenuBar::setDefaultAction(QAction *act)
Устанавливает действие по умолчанию на act.
Действие по умолчанию назначено для левой мягкой клавиши. Меню назначено для правой мягкой клавиши.
В настоящее время поддержка действия по умолчанию реализована только для Windows Mobile. На всех других платформах этот метод недоступен.
Данная функция была введена в Qt 4.4.
См. также defaultAction().
[virtual slot] void QMenuBar::setVisible(bool visible)
Переопределено из QWidget::setVisible().
[virtual] QSize QMenuBar::sizeHint() const
Переопределено из QWidget::sizeHint().
[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().
[static] void QMenuBar::wceCommands(uint command)
[static] void QMenuBar::wceRefresh()
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qmenubar.html