Spec-Zone.ru › Qt 5.14

Класс QWidgetAction

Класс QWidgetAction расширяет QAction интерфейсом для вставки пользовательских виджетов в контейнеры действий, такие как панели инструментов. Подробнее...

Заголовок: #include <QWidgetAction>
qmake: QT += widgets
С тех пор: Qt 4.2
Наследуется от: QAction

Этот класс был представлен в Qt 4.2.

  • Список всех членов, включая унаследованные

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

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) override
virtual bool eventFilter(QObject *obj, QEvent *event) override

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

Большинство действий в приложении представлены в виде элементов меню или кнопок на панелях инструментов. Однако иногда необходимы более сложные виджеты. Например, действие масштабирования в текстовом редакторе может быть реализовано с помощью QComboBox на QToolBar, представляя диапазон различных уровней масштабирования. QToolBar предоставляет QToolBar::insertWidget() в качестве удобной функции для вставки одного виджета. Однако если вы хотите реализовать действие, использующее пользовательские виджеты для визуализации в нескольких контейнерах, вам необходимо создать подкласс QWidgetAction.

Если QWidgetAction добавляется, например, в QToolBar, вызывается QWidgetAction::createWidget(). Переопределения этой функции должны создавать новый пользовательский виджет с указанным родителем.

Если действие удаляется из контейнера виджета, вызывается QWidgetAction::deleteWidget() с ранее созданным пользовательским виджетом в качестве аргумента. По умолчанию реализация скрывает виджет и удаляет его с помощью QObject::deleteLater().

Если у вас только один пользовательский виджет, вы можете установить его в качестве виджета по умолчанию с помощью setDefaultWidget(). Этот виджет затем будет использоваться, если действие добавлено в QToolBar, или, в общем случае, в контейнер действий, поддерживающий QWidgetAction. Если QWidgetAction с единственным виджетом по умолчанию добавляется в две панели инструментов одновременно, то виджет по умолчанию отображается только в первой панели инструментов, в которую было добавлено действие. QWidgetAction берет на себя управление виджетом по умолчанию.

Обратите внимание, что виджету нужно активировать действие, например, переопределив обработчики событий мыши и вызвав QAction::trigger().

macOS: Если вы добавляете виджет в меню строки меню приложения на macOS, виджет будет добавлен и будет работать, но с некоторыми ограничениями:

  1. Виджет перемещается к родительскому виджету от QMenu к видимому элементу меню. Если вы покажете меню в другом месте (например, как всплывающее меню), виджета там не будет.
  2. Обработка фокуса/клавиатуры виджета невозможна.
  3. Из-за дизайна Apple отслеживание мыши в данный момент не работает.
  4. Подключение сигнала 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().

[override virtual protected] bool QWidgetAction::event(QEvent *event)

Переопределяет: QAction::event(QEvent *e).

[override virtual protected] bool QWidgetAction::eventFilter(QObject *obj, QEvent *event)

Переопределяет: QObject::eventFilter(QObject *watched, QEvent *event).

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/qt-5.14/qwidgetaction.html

Spec-Zone.ru

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