Класс QWidgetAction
Класс QWidgetAction расширяет класс QAction, добавляя интерфейс для вставки пользовательских виджетов в контейнеры действий, такие как панели инструментов. Подробнее...
| Заголовок: | #include <QWidgetAction> |
| qmake: | QT += widgets |
| С момента: | Qt 4.2 |
| Наследует: | QAction |
Открытые функции
| QWidgetAction(QObject *parent) | |
| virtual | ~QWidgetAction() |
| QWidget * | defaultWidget() const |
| void | releaseWidget(QWidget *widget) |
| QWidget * | requestWidget(QWidget *parent) |
| void | setDefaultWidget(QWidget *widget) |
Защищенные функции
| virtual QWidget * | createWidget(QWidget *parent) |
| QList<QWidget *> | createdWidgets() const |
| virtual void | deleteWidget(QWidget *widget) |
Переопределенные защищенные функции
| virtual bool | event(QEvent *event) |
| virtual bool | eventFilter(QObject *obj, QEvent *event) |
Дополнительные унаследованные члены
- 17 свойств унаследовано от QAction
- 1 свойство унаследовано от QObject
- 7 слотов унаследовано от QAction
- 1 слот унаследовано от QObject
- 4 сигналов унаследовано от QAction
- 2 сигнала унаследовано от QObject
- 11 статических открытых членов унаследовано от QObject
Подробное описание
Класс QWidgetAction расширяет класс QAction, добавляя интерфейс для вставки пользовательских виджетов в контейнеры действий, такие как панели инструментов.
Большинство действий в приложении представляются как элементы меню или кнопки на панелях инструментов. Однако иногда необходимы более сложные виджеты. Например, действие масштабирования в текстовом редакторе может быть реализовано с помощью QComboBox в QToolBar, предоставляющем ряд различных уровней масштабирования. QToolBar предоставляет функцию QToolBar::insertWidget() для удобства вставки одного виджета. Однако, если вы хотите реализовать действие, использующее пользовательские виджеты для визуализации в нескольких контейнерах, вам нужно наследовать от QWidgetAction.
Если QWidgetAction добавлен, например, в QToolBar, то вызывается QWidgetAction::createWidget(). Переопределения этой функции должны создавать новый пользовательский виджет с указанным родителем.
Если действие удалено из контейнерного виджета, то вызывается QWidgetAction::deleteWidget() с ранее созданным пользовательским виджетом в качестве аргумента. По умолчанию реализация скрывает виджет и удаляет его с помощью QObject::deleteLater().
Если у вас есть только один пользовательский виджет, вы можете установить его как виджет по умолчанию с помощью setDefaultWidget(). Этот виджет будет затем использоваться, если действие добавлено в QToolBar или, в общем случае, в контейнер действий, который поддерживает QWidgetAction. Если QWidgetAction с только виджетом по умолчанию добавлен в две панели инструментов одновременно, то виджет по умолчанию отображается только в первой панели инструментов, в которую было добавлено действие. QWidgetAction берет на себя владение виджетом по умолчанию.
Обратите внимание, что виджету необходимо активировать действие, например, переопределив обработчики событий мыши и вызвав QAction::trigger().
macOS: Если вы добавляете виджет в меню в строке меню приложения на macOS, виджет будет добавлен и будет работать, но с некоторыми ограничениями:
- Виджет переродируется из QMenu в родной просмотр меню. Если вы показываете меню в другом месте (например, как всплывающее меню), виджет там не будет.
- Обработка фокуса/клавиатуры виджета невозможна.
- Из-за дизайна Apple отслеживание мыши на виджете в настоящее время не работает.
- Подключение сигнала triggered() к слоту, который открывает модальное диалоговое окно, приведет к зависанию в macOS 10.4 (известная ошибка, признанная Apple), обходной путь — использование QueuedConnection вместо DirectConnection.
См. также QAction, QActionGroup и QWidget.
Документация по функциям-членам
QWidgetAction::QWidgetAction(QObject *parent)
Конструирует действие с parent.
[virtual] QWidgetAction::~QWidgetAction()
Уничтожает объект и освобождает выделенные ресурсы.
[virtual protected] QWidget *QWidgetAction::createWidget(QWidget *parent)
Эта функция вызывается всякий раз, когда действие добавляется в контейнерный виджет, поддерживающий пользовательские виджеты. Если вы не хотите, чтобы пользовательский виджет использовался в качестве представления действия в указанном виджете parent, то следует вернуть 0.
См. также deleteWidget().
[protected] QList<QWidget *> QWidgetAction::createdWidgets() const
Возвращает список виджетов, которые использовали createWidget() и в настоящее время используются виджетами, к которым было добавлено действие.
QWidget *QWidgetAction::defaultWidget() const
Возвращает виджет по умолчанию.
См. также setDefaultWidget().
[virtual protected] void QWidgetAction::deleteWidget(QWidget *widget)
Эта функция вызывается всякий раз, когда действие удаляется из контейнерного виджета, который отображает действие с помощью пользовательского widget, ранее созданного с помощью createWidget(). По умолчанию реализация скрывает widget и планирует его удаление с помощью QObject::deleteLater().
См. также createWidget().
[virtual protected] bool QWidgetAction::event(QEvent *event)
Переопределяет метод QObject::event().
[virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)
Переопределяет метод QObject::eventFilter().
void QWidgetAction::releaseWidget(QWidget *widget)
Освобождает указанный widget.
Контейнерные виджеты, поддерживающие действия, вызывают эту функцию при удалении действия виджета.
См. также requestWidget(), deleteWidget() и defaultWidget().
QWidget *QWidgetAction::requestWidget(QWidget *parent)
Возвращает виджет, представляющий действие с заданным parent.
Контейнерные виджеты, поддерживающие действия, могут вызывать эту функцию для запроса виджета в качестве визуального представления действия.
См. также releaseWidget(), createWidget() и defaultWidget().
void QWidgetAction::setDefaultWidget(QWidget *widget)
Устанавливает widget в качестве стандартного виджета. Владение передаётся QWidgetAction. Если подкласс не переопределяет createWidget() для возврата нового виджета, стандартный виджет используется, когда контейнерный виджет запрашивает виджет через requestWidget().
См. также defaultWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qwidgetaction.html