Тип QML Menu
Нативное меню. Подробнее...
| Оператор импорта: | import Qt.labs.platform 1.1 |
| С: | Qt 5.8 |
| Наследует: |
Свойства
- data : list<Object>
- enabled : bool
- font : font
- items : list<MenuItem>
- menuBar : MenuBar
- menuItem : MenuItem
- minimumWidth : int
- parentMenu : Menu
- systemTrayIcon : SystemTrayIcon
- title : string
- type : перечисление
- visible : bool
Сигналы
Методы
- void addItem(MenuItem item)
- void addMenu(Menu submenu)
- void clear()
- void close()
- void insertItem(int index, MenuItem item)
- void insertMenu(int index, Menu submenu)
- void open(MenuItem item)
- void open(Item target, MenuItem item)
- void removeItem(MenuItem item)
- void removeMenu(Menu submenu)
Подробное описание
Тип Menu предоставляет QML API для всплывающих меню платформы.
Меню можно использовать в MenuBar или в качестве отдельного контекстного меню. Следующий пример демонстрирует, как открыть контекстное меню при щелчке правой кнопкой мыши:
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: zoomMenu.open()
}
Menu {
id: zoomMenu
MenuItem {
text: qsTr("Zoom In")
shortcut: StandardKey.ZoomIn
onTriggered: zoomIn()
}
MenuItem {
text: qsTr("Zoom Out")
shortcut: StandardKey.ZoomOut
onTriggered: zoomOut()
}
} Подменю
Для создания подменю объявите Menu как дочерний элемент другого Menu:
Menu {
title: qsTr("Edit")
Menu {
title: qsTr("Advanced")
MenuItem {
text: qsTr("Auto-indent Selection")
onTriggered: autoIndentSelection()
}
MenuItem {
text: qsTr("Rewrap Paragraph")
onTriggered: rewrapParagraph()
}
}
} Динамическое создание пунктов меню
Возможно динамическое создание пунктов меню. Одним из самых простых способов является использование Instantiator. Например, для реализации подменю "Недавние файлы", где пункты основаны на списке файлов, хранящихся в настройках, можно использовать следующий код:
Menu {
title: qsTr("File")
Menu {
id: recentFilesSubMenu
title: qsTr("Recent Files")
enabled: recentFilesInstantiator.count > 0
Instantiator {
id: recentFilesInstantiator
model: settings.recentFiles
delegate: MenuItem {
text: settings.displayableFilePath(modelData)
onTriggered: loadFile(modelData)
}
onObjectAdded: recentFilesSubMenu.insertItem(index, object)
onObjectRemoved: recentFilesSubMenu.removeItem(object)
}
MenuSeparator {}
MenuItem {
text: qsTr("Clear Recent Files")
onTriggered: settings.clearRecentFiles()
}
}
} Доступность
Нативные меню платформы в настоящее время доступны на следующих платформах:
- macOS
- iOS
- Android
- Linux (доступно только в качестве отдельного контекстного меню при использовании темы платформы GTK+)
Модуль Qt Labs Platform использует Qt Widgets в качестве резервного варианта на платформах, где нет нативной реализации. Поэтому приложения, использующие типы из модуля Qt Labs Platform, должны быть связаны с QtWidgets и использовать QApplication вместо QGuiApplication.
Для связи с библиотекой QtWidgets добавьте следующее в ваш файл проекта qmake:
QT += widgets
Создайте экземпляр QApplication в main():
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
} Примечание: Типы в модулях Qt.labs не гарантируют сохранение совместимости в будущих версиях.
См. также MenuItem, MenuSeparator и MenuBar.
Документация по свойствам
[по умолчанию] data : список<Объект>
Это свойство по умолчанию содержит список всех объектов, объявленных как дочерние элементы меню. Свойство data включает объекты, которые не являются экземплярами MenuItem, такие как Таймер и QtObject.
См. также items.
enabled : bool
Это свойство определяет, включено ли меню. Значение по умолчанию — true.
font : шрифт
Это свойство содержит шрифт меню.
См. также текст.
Это свойство содержит список пунктов меню.
[только для чтения] menuBar : MenuBar
Это свойство содержит панель меню, к которой принадлежит меню, или null, если меню не находится на панели меню.
[только для чтения] menuItem : MenuItem
Это свойство содержит пункт, который представляет меню (в родительском меню).
minimumWidth : int
Это свойство содержит минимальную ширину меню. Значение по умолчанию — -1 (минимальная ширина отсутствует).
[только для чтения] parentMenu : Menu
Это свойство содержит родительское меню, к которому принадлежит меню, или null, если меню не является подменю.
[только для чтения] systemTrayIcon : SystemTrayIcon
Это свойство содержит значок системного трея, к которому принадлежит меню, или null , если меню не находится в значке системного трея.
title : строка
Это свойство содержит заголовок меню.
type : перечисление
Это свойство содержит тип меню.
Доступные значения:
| Константа | Описание |
|---|---|
Menu.DefaultMenu |
Обычное меню (по умолчанию). |
Menu.EditMenu |
Меню редактирования с предопределенными пунктами "Вырезать", "Копировать" и "Вставить". |
visible : bool
Это свойство определяет, отображается ли меню. Значение по умолчанию — true.
Документация по сигналам
aboutToHide()
Этот сигнал испускается, когда меню собирается скрыться для пользователя.
aboutToShow()
Этот сигнал испускается, когда меню собирается отобразиться для пользователя.
Документация по методам
void addItem(MenuItem item)
Добавляет item в конец меню.
void addMenu(Menu submenu)
Добавляет submenu в конец меню.
void clear()
Удаляет все пункты из меню.
void close()
Закрывает меню.
void insertItem(int index, MenuItem item)
Вставляет item в указанный index в меню.
void insertMenu(int index, Menu submenu)
Вставляет submenu в указанный index в меню.
END_OF_DOCUMENT_MARKERvoid open(MenuItem item)
Открывает меню в текущей позиции указателя мыши, необязательно выровненное по элементу меню item.
void open(Item target, MenuItem item)
Открывает меню в указанном элементе target, необязательно выровненное по элементу меню item.
void removeItem(MenuItem item)
Удаляет элемент item из меню.
void removeMenu(Menu submenu)
Удаляет подменю submenu из меню.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qml-qt-labs-platform-menu.html