Класс QGraphicsWidget
Класс QGraphicsWidget является базовым классом для всех элементов виджетов в QGraphicsScene. Подробнее...
| Заголовок: | #include <QGraphicsWidget> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QGraphicsObject и QGraphicsLayoutItem |
| Наследуется от: |
Открытые типы
| Перечисление | безымянное { Тип } |
Свойства
|
|
Открытые функции
| QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags()) | |
| virtual | ~QGraphicsWidget() |
| QList<QAction *> | actions() const |
| void | addAction(QAction *action) |
| void | addActions(const QList<QAction *> &actions) |
| void | adjustSize() |
| bool | autoFillBackground() const |
| Qt::FocusPolicy | focusPolicy() const |
| QGraphicsWidget * | focusWidget() const |
| QFont | font() const |
| void | getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const |
| int | grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut) |
| void | insertAction(QAction *before, QAction *action) |
| void | insertActions(QAction *before, const QList<QAction *> &actions) |
| bool | isActiveWindow() const |
| QGraphicsLayout * | layout() const |
| Qt::LayoutDirection | layoutDirection() const |
| virtual void | paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) |
| QPalette | palette() const |
| QRectF | rect() const |
| void | releaseShortcut(int id) |
| void | removeAction(QAction *action) |
| void | resize(const QSizeF &size) |
| void | resize(qreal w, qreal h) |
| void | setAttribute(Qt::WidgetAttribute attribute, bool on = true) |
| void | setAutoFillBackground(bool enabled) |
| void | setContentsMargins(QMarginsF margins) |
| void | setContentsMargins(qreal left, qreal top, qreal right, qreal bottom) |
| void | setFocusPolicy(Qt::FocusPolicy policy) |
| void | setFont(const QFont &font) |
| void | setGeometry(qreal x, qreal y, qreal w, qreal h) |
| void | setLayout(QGraphicsLayout *layout) |
| void | setLayoutDirection(Qt::LayoutDirection direction) |
| void | setPalette(const QPalette &palette) |
| void | setShortcutAutoRepeat(int id, bool enabled = true) |
| void | setShortcutEnabled(int id, bool enabled = true) |
| void | setStyle(QStyle *style) |
| void | setWindowFlags(Qt::WindowFlags wFlags) |
| void | setWindowFrameMargins(QMarginsF margins) |
| void | setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom) |
| void | setWindowTitle(const QString &title) |
| QSizeF | size() const |
| QStyle * | style() const |
| bool | testAttribute(Qt::WidgetAttribute attribute) const |
| void | unsetLayoutDirection() |
| void | unsetWindowFrameMargins() |
| Qt::WindowFlags | windowFlags() const |
| QRectF | windowFrameGeometry() const |
| QRectF | windowFrameRect() const |
| QString | windowTitle() const |
| Qt::WindowType | windowType() const |
Реализованные публичные функции
| виртуальный QRectF | boundingRect() const override |
| виртуальный void | getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override |
| виртуальный void | paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override |
| виртуальный void | setGeometry(const QRectF &rect) override |
| виртуальный QPainterPath | shape() const override |
| виртуальный int | type() const override |
Public Slots
| bool | close() |
Signals
| void | geometryChanged() |
| void | layoutChanged() |
Static Public Members
| void | setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second) |
Protected Functions
| виртуальный void | changeEvent(QEvent *event) |
| виртуальный void | closeEvent(QCloseEvent *event) |
| виртуальный bool | focusNextPrevChild(bool next) |
| виртуальный void | grabKeyboardEvent(QEvent *event) |
| виртуальный void | grabMouseEvent(QEvent *event) |
| виртуальный void | hideEvent(QHideEvent *event) |
| виртуальный void | initStyleOption(QStyleOption *option) const |
| виртуальный void | moveEvent(QGraphicsSceneMoveEvent *event) |
| виртуальный void | polishEvent() |
| виртуальный void | resizeEvent(QGraphicsSceneResizeEvent *event) |
| виртуальный void | showEvent(QShowEvent *event) |
| виртуальный void | ungrabKeyboardEvent(QEvent *event) |
| виртуальный void | ungrabMouseEvent(QEvent *event) |
| виртуальный bool | windowFrameEvent(QEvent *event) |
| виртуальный Qt::WindowFrameSection | windowFrameSectionAt(const QPointF &pos) const |
Reimplemented Protected Functions
| виртуальный bool | event(QEvent *event) override |
| виртуальный void | focusInEvent(QFocusEvent *event) override |
| виртуальный void | focusOutEvent(QFocusEvent *event) override |
| виртуальный void | hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override |
| виртуальный void | hoverMoveEvent(QGraphicsSceneHoverEvent *event) override |
| виртуальный QVariant | itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override |
| виртуальный bool | sceneEvent(QEvent *event) override |
| виртуальный QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
| виртуальный void | updateGeometry() override |
Detailed Description
QGraphicsWidget — это расширенный базовый элемент, предоставляющий дополнительные возможности по сравнению с QGraphicsItem. Он во многом похож на QWidget:
- Предоставляет палитру, шрифт и стиль.
- Имеет определённую геометрию.
- Поддерживает макеты с помощью setLayout() и layout().
- Поддерживает сокращения и действия с помощью grabShortcut() и insertAction()
В отличие от QGraphicsItem, QGraphicsWidget — не абстрактный класс; вы можете создавать экземпляры QGraphicsWidget, не наследуясь от него. Этот подход полезен для виджетов, которые служат только для организации дочерних виджетов в макете.
QGraphicsWidget можно использовать в качестве базового элемента для собственного пользовательского элемента, если требуется расширенная обработка фокуса ввода, например, фокус табуляции и активация, или макеты.
Поскольку QGraphicsWidget похож на QWidget и имеет похожий API, его проще перенести из QWidget в QGraphicsWidget, чем из QGraphicsItem.
Примечание: виджеты на основе QWidget могут быть непосредственно встроены в QGraphicsScene с помощью QGraphicsProxyWidget.
Заметные различия между QGraphicsWidget и QWidget:
| QGraphicsWidget | QWidget |
|---|---|
| Координаты и геометрия определены с помощью qreals (doubles или floats, в зависимости от платформы). | QWidget использует целочисленную геометрию (QPoint, QRect). |
| Виджет по умолчанию уже виден; вам не нужно вызывать show(), чтобы отобразить виджет. | QWidget по умолчанию скрыт, пока вы не вызовете show(). |
| Поддерживается подмножество атрибутов виджета. | Поддерживаются все атрибуты виджета. |
| Стиль верхнего элемента по умолчанию — QGraphicsScene::style | Стиль верхнего виджета по умолчанию — QApplication::style |
| Графическое представление предоставляет собственную систему перетаскивания, отличную от QWidget. | Стандартная система перетаскивания. |
| Элементы виджета не поддерживают модальность. | Полная поддержка модальности. |
QGraphicsWidget поддерживает подмножество атрибутов виджетов Qt (Qt::WidgetAttribute), как показано в таблице ниже. Любые атрибуты, не указанные в этой таблице, не поддерживаются или не используются.
| Атрибут виджета | Использование |
|---|---|
| Qt::WA_SetLayoutDirection | Устанавливается функцией setLayoutDirection(), очищается функцией unsetLayoutDirection(). Вы можете проверить этот атрибут, чтобы убедиться, что виджету явно назначено значение layoutDirection. Если атрибут не установлен, значение layoutDirection() наследуется. |
| Qt::WA_RightToLeft | Переключается функцией setLayoutDirection(). Наследуется от родительского элемента/сцены. Если установлен, компоновка виджета будет упорядочивать горизонтально расположенные виджеты справа налево. |
| Qt::WA_SetStyle | Устанавливается и очищается функцией setStyle(). Если этот атрибут установлен, виджету явно назначен стиль. Если он не установлен, виджет будет использовать стиль сцены или приложения. |
| Qt::WA_Resized | Устанавливается функциями setGeometry() и resize(). |
| Qt::WA_SetPalette | Устанавливается функцией setPalette(). |
| Qt::WA_SetFont | Устанавливается функцией setFont(). |
| Qt::WA_WindowPropagation | Включает распространение на виджеты окна. |
Хотя QGraphicsWidget наследует от QObject и QGraphicsItem, следует использовать функции, предоставляемые QGraphicsItem, а не QObject, для управления отношениями между родительскими и дочерними элементами. Эти функции управляют порядком размещения элементов в стеке, а также их владением.
Примечание: Функция QObject::parent() всегда должна возвращать nullptr для QGraphicsWidget, но эта политика не строго определена.
См. также QGraphicsProxyWidget, QGraphicsItem и Виджеты и макеты.
Документация по типам членов
enum QGraphicsWidget::anonymous
Значение, возвращаемое виртуальной функцией type().
| Константа | Значение | Описание |
|---|---|---|
QGraphicsWidget::Type |
11 |
Элемент виджета графики |
Документация по свойствам
autoFillBackground : bool
Это свойство указывает, заполняется ли фон виджета автоматически.
Если включено, это свойство заставит Qt заполнить фон виджета перед вызовом метода paint(). Используемый цвет определяется ролью цвета QPalette::Window из палитры виджета palette.
Кроме того, окна всегда заполняются цветом QPalette::Window, если не установлены атрибуты WA_OpaquePaintEvent или WA_NoSystemBackground.
По умолчанию это свойство равно false.
Функции доступа:
| bool | autoFillBackground() const |
| void | setAutoFillBackground(bool enabled) |
См. также Qt::WA_OpaquePaintEvent и Qt::WA_NoSystemBackground.
focusPolicy : Qt::FocusPolicy
Это свойство определяет способ, которым виджет принимает фокус клавиатуры.
Политика фокуса равна Qt::TabFocus, если виджет принимает фокус при нажатии клавиши Tab; Qt::ClickFocus, если виджет принимает фокус при щелчке; Qt::StrongFocus, если виджет принимает фокус и при нажатии клавиши Tab, и при щелчке; и Qt::NoFocus (по умолчанию), если виджет не принимает фокус вообще.
Вы должны включить фокус клавиатуры для виджета, если он обрабатывает события клавиатуры. Обычно это делается в конструкторе виджета. Например, конструктор QLineEdit вызывает setFocusPolicy(Qt::StrongFocus).
Если вы включаете политику фокуса (т.е., не Qt::NoFocus), QGraphicsWidget автоматически включит флаг ItemIsFocusable. Установка Qt::NoFocus для виджета очистит флаг ItemIsFocusable. Если виджет в настоящее время имеет фокус клавиатуры, виджет автоматически потеряет фокус.
Функции доступа:
| Qt::FocusPolicy | focusPolicy() const |
| void | setFocusPolicy(Qt::FocusPolicy policy) |
См. также focusInEvent(), focusOutEvent(), keyPressEvent(), keyReleaseEvent(), и enabled.
font : QFont
Это свойство содержит шрифт виджета.
Это свойство содержит шрифт виджета.
QFont состоит из свойств шрифта, которые были явно определены, и свойств, неявно унаследованных от родительского виджета. Таким образом, font() может возвращать шрифт, отличающийся от шрифта, установленного с помощью setFont(). Эта схема позволяет определить отдельные элементы шрифта, не влияя на унаследованные элементы шрифта.
При изменении шрифта виджета он разрешает свои элементы относительно родительского виджета. Если у виджета нет родительского виджета, он разрешает свои элементы относительно сцены. Затем виджет отправляет себе событие FontChange и уведомляет всех своих потомков, чтобы они могли также разрешить свои шрифты.
По умолчанию это свойство содержит системный шрифт приложения.
Функции доступа:
| QFont | font() const |
| void | setFont(const QFont &font) |
См. также QApplication::font(), QGraphicsScene::font и QFont::resolve.
geometry : QRectF
Это свойство содержит геометрию виджета.
Устанавливает геометрию элемента на rect. В результате вызова этой функции изменяются положение и размер элемента. Сначала элемент перемещается, затем изменяется его размер.
Побочным эффектом вызова этой функции является то, что виджет получит событие перемещения и событие изменения размера. Кроме того, если виджету назначен макет, макет активируется.
Функции доступа:
| virtual void | setGeometry(const QRectF &rect) override |
| void | setGeometry(qreal x, qreal y, qreal w, qreal h) |
Сигналы-уведомления:
| void | geometryChanged() |
См. также geometry() и resize().
layout : QGraphicsLayout*
Это свойство содержит макет виджета.
Любой существующий менеджер макета удаляется перед назначением нового макета. Если layout равно nullptr, виджет остаётся без макета. Геометрии существующих дочерних виджетов остаются неизменными.
QGraphicsWidget принимает владение над layout.
Все виджеты, которые в настоящее время управляются layout или любыми его дочерними макетами, автоматически переназначаются родительскому элементу. Затем макет аннулируется, и геометрии дочерних виджетов корректируются в соответствии с geometry() и contentsMargins() этого элемента. Дочерние элементы, которые не управляются явно layout, не изменяются после назначения макета этому виджету.
Если макет в настоящее время не управляет этим виджетом, layout() возвращает nullptr.
Функции доступа:
| QGraphicsLayout * | layout() const |
| void | setLayout(QGraphicsLayout *layout) |
Сигналы-уведомления:
| void | layoutChanged() |
layoutDirection : Qt::LayoutDirection
Это свойство содержит направление макета для этого виджета.
Это свойство изменяет атрибут Qt::WA_RightToLeft этого виджета и всех его потомков. Также устанавливает атрибут Qt::WA_SetLayoutDirection этого виджета.
Направление макета виджета определяет порядок, в котором менеджер макета горизонтально располагает дочерние виджеты этого виджета. Значение по умолчанию зависит от языка и локали приложения и, как правило, совпадает с направлением чтения и записи слов. С Qt::LeftToRight макет начинает размещать дочерние виджеты с левой стороны этого виджета вправо. Qt::RightToLeft делает наоборот — макет размещает виджеты, начиная с правого края и перемещаясь влево.
Дочерние виджеты наследуют направление макета от родителя. Виджеты верхнего уровня наследуют направление макета от QGraphicsScene::layoutDirection. Если вы измените направление макета виджета, вызвав setLayoutDirection(), виджет отправит себе событие LayoutDirectionChange, а затем распространит новое направление макета на всех своих потомков.
Функции доступа:
| Qt::LayoutDirection | layoutDirection() const |
| void | setLayoutDirection(Qt::LayoutDirection direction) |
| void | unsetLayoutDirection() |
См. также QWidget::layoutDirection и QApplication::layoutDirection.
maximumSize : const QSizeF
Это свойство содержит максимальный размер виджета.
См. также setMaximumSize(), maximumSize(), minimumSize и preferredSize.
minimumSize : const QSizeF
Это свойство содержит минимальный размер виджета.
См. также setMinimumSize(), minimumSize(), preferredSize и maximumSize.
palette : QPalette
Это свойство содержит палитру виджета.
Это свойство предоставляет палитру виджета. Палитра предоставляет цвета и кисти для групп цветов (например, QPalette::Button) и состояний (например, QPalette::Inactive), в общих чертах определяя общий вид виджета и его дочерних элементов.
QPalette состоит из явно определённых групп цветов и групп, неявно унаследованных от родительского виджета. Из-за этого palette() может возвращать другую палитру, чем та, которая была установлена с помощью setPalette(). Эта схема позволяет определять отдельные записи в палитре, не влияя на унаследованные записи палитры.
Когда палитра виджета изменяется, её записи разрешаются относительно родительского виджета, или, если у него нет родительского виджета, относительно сцены. Затем он отправляет себе событие PaletteChange и уведомляет всех своих потомков, чтобы они также могли разрешить свои палитры.
По умолчанию это свойство содержит стандартную палитру приложения.
Функции доступа:
| QPalette | palette() const |
| void | setPalette(const QPalette &palette) |
См. также QGuiApplication::palette(), QGraphicsScene::palette и QPalette::resolve.
preferredSize : const QSizeF
Это свойство содержит предпочтительный размер виджета
См. также setPreferredSize(), preferredSize(), minimumSize и maximumSize.
size : QSizeF
Это свойство содержит размер виджета
Вызов resize() изменяет размер виджета на size, ограниченный minimumSize() и maximumSize(). Это свойство влияет только на ширину и высоту виджета (например, его правую и нижнюю границы); положение и верхний левый угол виджета остаются неизменными.
Изменение размера виджета вызывает немедленное получение виджетом события GraphicsSceneResize со старым и новым размером виджета. Если у виджета назначен макет при поступлении этого события, макет будет активирован, и он автоматически обновит геометрию всех дочерних виджетов.
Это свойство не влияет на любой макет родительского виджета. Если сам виджет управляется родительским макетом; например, у него есть родительский виджет с назначенным макетом, этот макет не будет активирован.
По умолчанию это свойство содержит размер с нулевой шириной и высотой.
Функции доступа:
| QSizeF | size() const |
| void | resize(const QSizeF &size) |
| void | resize(qreal w, qreal h) |
Сигнал уведомления:
| void | geometryChanged() |
См. также setGeometry(), QGraphicsSceneResizeEvent и QGraphicsLayout.
sizePolicy : const QSizePolicy
Это свойство содержит политику размера для виджета
См. также sizePolicy(), setSizePolicy() и QWidget::sizePolicy().
windowFlags : Qt::WindowFlags
Это свойство содержит флаги окна виджета
Флаги окна представляют собой комбинацию типа окна (например, Qt::Dialog) и нескольких флагов, дающих подсказки о поведении окна. Поведение зависит от платформы.
По умолчанию это свойство не содержит флагов окна.
Окна являются панелями. Если вы установите флаг Qt::Window, флаг ItemIsPanel будет автоматически установлен. Если вы сбросите флаг Qt::Window, флаг ItemIsPanel также будет сброшен. Обратите внимание, что флаг ItemIsPanel может быть установлен независимо от Qt::Window.
Функции доступа:
| Qt::WindowFlags | windowFlags() const |
| void | setWindowFlags(Qt::WindowFlags wFlags) |
См. также isWindow() и isPanel().
windowTitle : QString
Это свойство содержит заголовок окна (надпись).
Это свойство используется только для окон.
По умолчанию, если заголовок не задан, это свойство содержит пустую строку.
Функции доступа:
| QString | windowTitle() const |
| void | setWindowTitle(const QString &title) |
Документация по функциям-членам
QGraphicsWidget::QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags())
Создаёт экземпляр QGraphicsWidget. Дополнительный аргумент parent передаётся конструктору QGraphicsItem. Дополнительный аргумент wFlags задаёт флаги окна виджета (например, является ли виджет окном, инструментом, всплывающим окном и т. д.).
bool QGraphicsWidget::close()
Вызовите эту функцию для закрытия виджета.
Возвращает true, если виджет был закрыт; в противном случае возвращает false. Этот слот сначала отправит событие QCloseEvent в виджет, который может принять или не принять событие. Если событие было проигнорировано, ничего не происходит. Если событие было принято, он скрывает виджет.
Если у виджета установлен атрибут Qt::WA_DeleteOnClose, он будет удалён.
void QGraphicsWidget::geometryChanged()
Этот сигнал генерируется всякий раз, когда геометрия изменяется в setGeometry().
Примечание: Сигнал уведомления для свойства geometry. Сигнал уведомления для свойства size.
QGraphicsWidget::~QGraphicsWidget()
Уничтожает экземпляр QGraphicsWidget.
QList<QAction *> QGraphicsWidget::actions() const
Возвращает (возможно, пустой) список действий этого виджета.
См. также insertAction(), removeAction(), QWidget::actions(), QAction::associatedWidgets() и QAction::associatedGraphicsWidgets().
void QGraphicsWidget::addAction(QAction *action)
Добавляет действие action в список действий этого виджета.
У всех QGraphicsWidgets есть список QActions, однако они могут быть представлены графически многими различными способами. По умолчанию список QAction (возвращаемый actions()) используется для создания контекстного QMenu.
QGraphicsWidget должен иметь только один экземпляр каждого действия, и добавление уже имеющегося действия не приведёт к тому, что это действие будет дважды присутствовать в виджете.
См. также removeAction(), insertAction(), actions() и QWidget::addAction().
void QGraphicsWidget::addActions(const QList<QAction *> &actions)
Добавляет действия actions в список действий этого виджета.
См. также removeAction(), QMenu, addAction() и QWidget::addActions().
void QGraphicsWidget::adjustSize()
Настраивает размер виджета в соответствии с эффективной подсказкой предпочтительного размера.
Эта функция вызывается неявно при первом отображении элемента.
См. также effectiveSizeHint() и Qt::MinimumSize.
[override virtual] QRectF QGraphicsWidget::boundingRect() const
Реализует: QGraphicsItem::boundingRect() const.
[virtual protected] void QGraphicsWidget::changeEvent(QEvent *event)
Этот обработчик событий можно переопределить для обработки изменений состояния.
Изменённое состояние в этом событии можно получить через event.
События изменения состояния включают: QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange, QEvent::StyleChange, QEvent::PaletteChange, QEvent::ParentChange, QEvent::LayoutDirectionChange и QEvent::ContentsRectChange.
[virtual protected] void QGraphicsWidget::closeEvent(QCloseEvent *event)
Этот обработчик событий для event можно переопределить в подклассе для получения событий закрытия виджета. По умолчанию обработчик принимает событие.
См. также close() и QCloseEvent.
[override virtual protected] bool QGraphicsWidget::event(QEvent *event)
Реализует: QGraphicsObject::event(QEvent *ev).
Обрабатывает событие event. QGraphicsWidget обрабатывает следующие события:
| Событие | Использование |
|---|---|
| Polish | Доставляется виджету некоторое время после его отображения. |
| GraphicsSceneMove | Доставляется виджету после изменения его локального положения. |
| GraphicsSceneResize | Доставляется виджету после изменения его размера. |
| Show | Доставляется виджету перед его отображением. |
| Hide | Доставляется виджету после его скрытия. |
| PaletteChange | Доставляется виджету после изменения его палитры. |
| FontChange | Доставляется виджету после изменения его шрифта. |
| EnabledChange | Доставляется виджету после изменения его состояния включения/выключения. |
| StyleChange | Доставляется виджету после изменения его стиля. |
| LayoutDirectionChange | Доставляется виджету после изменения его направления выравнивания. |
| ContentsRectChange | Доставляется виджету после изменения его отступов/прямоугольника содержимого. |
[override virtual protected] void QGraphicsWidget::focusInEvent(QFocusEvent *event)
Реализует: QGraphicsItem::focusInEvent(QFocusEvent *event).
[virtual protected] bool QGraphicsWidget::focusNextPrevChild(bool next)
Находит новый виджет для получения фокуса клавиатуры, соответствующим образом для Tab и Shift+Tab, и возвращает true, если новый виджет найден; возвращает false в противном случае. Если next имеет значение true, эта функция выполняет поиск вперёд; если next имеет значение false, она выполняет поиск назад.
Иногда вам потребуется переопределить эту функцию, чтобы обеспечить специальную обработку фокуса для вашего виджета и его дочерних виджетов. Например, веб-браузер может переопределить её, чтобы переместить текущую активную ссылку вперёд или назад, и вызвать базовый метод только когда достигается последняя или первая ссылка на странице.
Дочерние виджеты вызывают focusNextPrevChild() для своих родительских виджетов, но только окно, содержащее дочерние виджеты, решает, куда перенаправить фокус. Переопределяя эту функцию для объекта, вы получаете контроль над перемещением фокуса для всех дочерних виджетов.
См. также focusPolicy().
[override virtual protected] void QGraphicsWidget::focusOutEvent(QFocusEvent *event)
Реализует: QGraphicsItem::focusOutEvent(QFocusEvent *event).
QGraphicsWidget *QGraphicsWidget::focusWidget() const
Если у этого виджета, дочернего виджета или потомка этого виджета в данный момент есть фокус ввода, эта функция вернёт указатель на этот виджет. Если ни один дочерний виджет не имеет фокуса ввода, возвращается nullptr.
См. также QGraphicsItem::focusItem() и QWidget::focusWidget().
[override virtual] void QGraphicsWidget::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
Реализует: QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.
Получает отступы содержимого виджета. Отступы хранятся в left, top, right и bottom, как указатели на qreals. Каждый аргумент можно опустить, передав nullptr.
См. также setContentsMargins().
void QGraphicsWidget::getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
Получает отступы рамки окна виджета. Отступы хранятся в left, top, right и bottom как указатели на qreals. Каждый аргумент можно опустить, передав nullptr.
См. также setWindowFrameMargins() и windowFrameRect().
[virtual protected] void QGraphicsWidget::grabKeyboardEvent(QEvent *event)
Этот обработчик событий для event можно переопределить в подклассе для получения уведомлений о событиях QEvent::GrabKeyboard.
См. также grabKeyboard() и grabMouse().
[virtual protected] void QGraphicsWidget::grabMouseEvent(QEvent *event)
Этот обработчик событий для event можно переопределить в подклассе для получения уведомлений о событиях QEvent::GrabMouse.
См. также grabMouse() и grabKeyboard().
int QGraphicsWidget::grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut)
Добавляет ярлык к системе ярлыков Qt, который следит за заданной комбинацией клавиш sequence в заданном context. Если context равен Qt::ApplicationShortcut, ярлык применяется ко всему приложению. В противном случае он либо локален для этого виджета (Qt::WidgetShortcut), либо для самого окна (Qt::WindowShortcut). Для виджетов, которые не являются частью окна (т.е. виджеты верхнего уровня и их потомки), ярлыки Qt::WindowShortcut применяются к сцене.
Если одну и ту же комбинацию клавиш sequence захватили несколько виджетов, при её нажатии событие QEvent::Shortcut отправляется всем виджетам, к которым оно относится, в произвольном порядке, но с флагом «ambiguous» (неопределённый).
Предупреждение: Вам обычно не нужно использовать эту функцию; вместо этого создавайте QAction с необходимыми комбинациями клавиш (если вы также хотите эквивалентные пункты меню и кнопки на панели инструментов) или создавайте QShortcut, если вам нужны только комбинации клавиш. Как QAction, так и QShortcut обрабатывают всю фильтрацию событий за вас и предоставляют сигналы, которые срабатывают при нажатии пользователем комбинации клавиш, поэтому их гораздо проще использовать, чем эту низкоуровневую функцию.
См. также releaseShortcut(), setShortcutEnabled() и QWidget::grabShortcut().
[virtual protected] void QGraphicsWidget::hideEvent(QHideEvent *event)
Этот обработчик событий для событий Hide доставляется после скрытия виджета, например, после вызова setVisible(false) для виджета или одного из его предков, когда виджет был ранее отображён.
Вы можете переопределить этот обработчик событий, чтобы обнаружить, когда ваш виджет скрывается. Вызов QEvent::accept() или QEvent::ignore() на event не имеет эффекта.
См. также showEvent(), QWidget::hideEvent() и ItemVisibleChange.
END_OF_DOCUMENT_MARKER
[override virtual protected] void QGraphicsWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Реализует: QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event).
[override virtual protected] void QGraphicsWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Реализует: QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event).
[virtual protected] void QGraphicsWidget::initStyleOption(QStyleOption *option) const
Заполняет объект стиля для данного виджета на основе его текущего состояния и сохраняет результат в option. По умолчанию реализация заполняет option следующими свойствами.
| Свойство опции стиля | Значение |
|---|---|
| state & QStyle::State_Enabled | Соответствует QGraphicsItem::isEnabled(). |
| state & QStyle::State_HasFocus | Соответствует QGraphicsItem::hasFocus(). |
| state & QStyle::State_MouseOver | Соответствует QGraphicsItem::isUnderMouse(). |
| direction | Соответствует QGraphicsWidget::layoutDirection(). |
| rect | Соответствует QGraphicsWidget::rect().toRect(). |
| palette | Соответствует QGraphicsWidget::palette(). |
| fontMetrics | Соответствует QFontMetrics(QGraphicsWidget::font()). |
Подклассы QGraphicsWidget должны вызывать базовую реализацию, а затем проверять тип option с помощью qstyleoption_cast<>() или проверять QStyleOption::Type перед сохранением опций, специфичных для виджета.
Например:
void MyGroupBoxWidget::initStyleOption(QStyleOption *option) const
{
QGraphicsWidget::initStyleOption(option);
if (QStyleOptionGroupBox *box = qstyleoption_cast<QStyleOptionGroupBox *>(option)) {
// Add group box specific state.
box->flat = isFlat();
...
}
} См. также QStyleOption::initFrom().
void QGraphicsWidget::insertAction(QAction *before, QAction *action)
Вставляет действие action в список действий этого виджета перед действием before. Добавляет действие в конец, если before является nullptr или before не является допустимым действием для этого виджета.
QGraphicsWidget должен содержать только одно действие каждого типа.
См. также removeAction(), addAction(), QMenu, actions(), и QWidget::insertActions().
void QGraphicsWidget::insertActions(QAction *before, const QList<QAction *> &actions)
Вставляет действия actions в список действий этого виджета перед действием before. Добавляет действия в конец, если before является nullptr или before не является допустимым действием для этого виджета.
QGraphicsWidget может содержать не более одного действия каждого типа.
См. также removeAction(), QMenu, insertAction(), и QWidget::insertActions().
bool QGraphicsWidget::isActiveWindow() const
Возвращает true, если окно этого виджета является активным окном или если у виджета нет окна, но он находится в активной сцене (т.е., сцене, которая в данный момент имеет фокус).
Активное окно — это окно, которое либо содержит дочерний виджет, который в данный момент имеет фокус ввода, либо само имеет фокус ввода.
См. также QGraphicsScene::activeWindow(), QGraphicsScene::setActiveWindow(), и isActive().
[override virtual protected] QVariant QGraphicsWidget::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
Реализует: QGraphicsItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value).
QGraphicsWidget использует базовую реализацию этой функции для захвата и передачи событий, связанных с изменениями состояния элемента. По этой причине очень важно, чтобы подклассы вызывали базовую реализацию.
change указывает тип изменения, а value — новое значение.
Например, QGraphicsWidget использует ItemVisibleChange для передачи событий Show и Hide, ItemPositionHasChanged для передачи событий Move и ItemParentChange для передачи событий ParentChange, а также для управления цепочкой фокуса.
QGraphicsWidget по умолчанию включает флаг ItemSendsGeometryChanges для отслеживания изменений положения.
См. также QGraphicsItem::itemChange().
QGraphicsLayout *QGraphicsWidget::layout() const
Возвращает макет этого виджета или nullptr, если макет в данный момент не управляет этим виджетом.
Примечание: Функция-геттер для свойства layout.
См. также setLayout().
[virtual protected] void QGraphicsWidget::moveEvent(QGraphicsSceneMoveEvent *event)
Обработчик событий для событий GraphicsSceneMove вызывается после перемещения виджета (например, при изменении его локального положения).
Это событие передается только при перемещении элемента локально. Вызов setTransform() или перемещение любого из предков элемента не влияет на локальное положение элемента.
Вы можете переопределить этот обработчик событий, чтобы обнаружить перемещение вашего виджета. Вызов QEvent::accept() или QEvent::ignore() для event не имеет эффекта.
См. также ItemPositionChange и ItemPositionHasChanged.
[override virtual] void QGraphicsWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
Реализует: QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget).
[virtual] void QGraphicsWidget::paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
Эта виртуальная функция вызывается QGraphicsScene для отрисовки рамки окна для окон с использованием painter, option и widget в локальных координатах. Базовая реализация использует текущий стиль для отрисовки рамки и заголовка.
Вы можете переопределить эту функцию в подклассе QGraphicsWidget, чтобы обеспечить настраиваемую отрисовку рамки окна виджета.
См. также QGraphicsItem::paint().
[virtual protected] void QGraphicsWidget::polishEvent()
Это событие передаётся элементу сценой в какой-то момент после его создания, но до отображения или другого доступа к нему через сцену. Вы можете использовать этот обработчик событий для выполнения последних инициализаций виджета, которые требуют, чтобы элемент был полностью создан.
Базовая реализация ничего не делает.
QRectF QGraphicsWidget::rect() const
Возвращает локальный прямоугольник элемента в виде QRectF. Эта функция эквивалентна QRectF(QPointF(), size()).
См. также setGeometry() и resize().
void QGraphicsWidget::releaseShortcut(int id)
Удаляет ярлык с заданным id из системы ярлыков Qt. Виджет больше не будет получать события QEvent::Shortcut для последовательности клавиш ярлыка (если только у него нет других ярлыков с той же последовательностью клавиш).
END_OF_DOCUMENT_MARKERПредупреждение: Обычно использовать эту функцию не нужно, так как система сокращений Qt автоматически удаляет сокращения, когда родительский виджет уничтожается. Лучше использовать QAction или QShortcut для обработки сокращений, так как они проще в использовании, чем эта низкоуровневая функция. Обратите также внимание, что это дорогостоящая операция.
См. также grabShortcut(), setShortcutEnabled() и QWidget::releaseShortcut().
void QGraphicsWidget::removeAction(QAction *action)
Удаляет действие action из списка действий данного виджета.
См. также insertAction(), actions(), insertAction() и QWidget::removeAction().
void QGraphicsWidget::resize(qreal w, qreal h)
Это перегруженная функция.
Выполняет изменение размера с заданной width (w) и height (h). Эта функция-удобство эквивалентна вызову resize(QSizeF(w, h)).
Примечание: Функция-сеттер для свойства size.
См. также setGeometry() и setTransform().
[virtual protected] void QGraphicsWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
Обработчик событий для событий GraphicsSceneResize, который вызывается после изменения размера виджета (т.е. изменения его локального размера). event содержит как старый, так и новый размеры.
Это событие передаётся только при локальном изменении размера виджета; вызов setTransform() на виджете или любом из его предков или представлений не влияет на локальный размер виджета.
Вы можете переопределить этот обработчик событий, чтобы обнаружить изменение размера вашего виджета. Вызов QEvent::accept() или QEvent::ignore() для event не имеет эффекта.
См. также geometry() и setGeometry().
[override virtual protected] bool QGraphicsWidget::sceneEvent(QEvent *event)
Переопределяет: QGraphicsItem::sceneEvent(QEvent *event).
Реализация sceneEvent() в QGraphicsWidget просто передаёт event в QGraphicsWidget::event(). Вы можете обрабатывать все события для своего виджета в event() или в любой из удобных функций; переопределять эту функцию в подклассе QGraphicsWidget не требуется.
Возвращает true, если event был распознан и обработан; в противном случае возвращает false.
См. также QGraphicsItem::sceneEvent().
void QGraphicsWidget::setAttribute(Qt::WidgetAttribute attribute, bool on = true)
Если on имеет значение true, эта функция включает attribute; в противном случае attribute отключается.
См. документацию класса QGraphicsWidget для полного списка поддерживаемых атрибутов и их назначения.
См. также testAttribute() и QWidget::setAttribute().
[since 5.14] void QGraphicsWidget::setContentsMargins(QMarginsF margins)
Устанавливает отступы содержимого виджета равными margins.
Отступы содержимого используются назначенным макетом для определения размещения дочерних виджетов и макетов. Отступы особенно полезны для виджетов, которые ограничивают дочерние виджеты только определённой частью собственной геометрии. Например, группа с макетом разместит дочерние виджеты внутри своей рамки, но ниже заголовка.
Изменение отступов содержимого виджета всегда вызывает update(), и любой назначенный макет активируется автоматически. Затем виджет получит событие ContentsRectChange.
Эта функция была представлена в Qt 5.14.
См. также getContentsMargins() и setGeometry().
void QGraphicsWidget::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
Это перегруженная функция.
Устанавливает отступы содержимого виджета равными left, top, right и bottom.
void QGraphicsWidget::setGeometry(qreal x, qreal y, qreal w, qreal h)
Эта функция-удобство эквивалентна вызову setGeometry(QRectF( x, y, w, h)).
Примечание: Функция-сеттер для свойства geometry.
См. также geometry() и resize().
void QGraphicsWidget::setLayout(QGraphicsLayout *layout)
Устанавливает макет для этого виджета равным layout. Любой существующий менеджер макетов удаляется перед назначением нового макета. Если layout равен nullptr, виджет остаётся без макета. Геометрии существующих дочерних виджетов останутся неизменными.
Все виджеты, которые в настоящее время управляются layout или любым из его подмакетов, автоматически переродируются в этот элемент. Затем макет аннулируется, и геометрии дочерних виджетов корректируются в соответствии с geometry() и contentsMargins() этого элемента. Дочерние виджеты, которые не управляются явно layout, не подвергаются влиянию макета после его назначения данному виджету.
QGraphicsWidget принимает владение layout.
Примечание: Функция-сеттер для свойства layout.
См. также layout(), QGraphicsLinearLayout::addItem() и QGraphicsLayout::invalidate().
void QGraphicsWidget::setShortcutAutoRepeat(int id, bool enabled = true)
Если enabled равно true, автоматическое повторение сокращения с заданным id включено; в противном случае — выключено.
См. также grabShortcut(), releaseShortcut() и QWidget::setShortcutAutoRepeat().
void QGraphicsWidget::setShortcutEnabled(int id, bool enabled = true)
Предупреждение: Обычно использовать эту функцию не нужно, так как система сокращений Qt автоматически включает/отключает сокращения, поскольку виджеты скрываются/показываются и получают или теряют фокус. Лучше использовать QAction или QShortcut для обработки сокращений, так как они проще в использовании, чем эта низкоуровневая функция.
См. также grabShortcut(), releaseShortcut() и QWidget::setShortcutEnabled().
void QGraphicsWidget::setStyle(QStyle *style)
Устанавливает стиль виджета в style. QGraphicsWidget не принимает владение style.
Если стиль не назначен или style равен nullptr, виджет будет использовать QGraphicsScene::style() (если это было установлено). В противном случае виджет будет использовать QApplication::style().
Эта функция устанавливает атрибут Qt::WA_SetStyle, если style не равен nullptr; в противном случае атрибут очищается.
См. также style().
[static] void QGraphicsWidget::setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second)
Перемещает виджет second в кольце виджетов фокуса, чтобы при нажатии клавиши Tab фокус клавиатуры перемещался с виджета first на виджет second.
Обратите внимание, что поскольку порядок табуляции виджета second изменяется, вам следует организовать цепочку так:
setTabOrder(a, b); // a to b setTabOrder(b, c); // a to b to c setTabOrder(c, d); // a to b to c to d
а не так:
// WRONG setTabOrder(c, d); // c to d setTabOrder(a, b); // a to b AND c to d setTabOrder(b, c); // a to b to c, but not c to d
Если first равен nullptr, это означает, что second должен быть первым виджетом, который получит фокус ввода, если сцена получит фокус Tab (т.е. пользователь нажимает Tab, чтобы фокус перешёл в сцену). Если second равен nullptr, это означает, что first должен быть первым виджетом, который получит фокус, если сцена получила фокус BackTab.
По умолчанию порядок ввода табуляции определяется неявно, используя порядок создания виджетов.
См. также focusPolicy и Фокус клавиатуры в виджетах.
[since 5.14] void QGraphicsWidget::setWindowFrameMargins(QMarginsF margins)
Устанавливает отступы рамки окна виджета в margins. Отступы рамки по умолчанию предоставляются стилем и зависят от текущих флагов окна.
Если вы хотите нарисовать собственную декорировку окна, вы можете установить собственные отступы рамки для переопределения отступов по умолчанию.
Данная функция была введена в Qt 5.14.
См. также unsetWindowFrameMargins(), getWindowFrameMargins() и windowFrameRect().
void QGraphicsWidget::setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom)
Это перегруженная функция.
Устанавливает отступы рамки окна виджета в left, top, right и bottom.
[override virtual] QPainterPath QGraphicsWidget::shape() const
Реализует: QGraphicsItem::shape() const.
[virtual protected] void QGraphicsWidget::showEvent(QShowEvent *event)
Этот обработчик событий для событий Show доставляется перед отображением виджета, например, после вызова setVisible(true) для виджета или одного из его предков, когда виджет был ранее скрыт.
Вы можете переопределить этот обработчик событий, чтобы обнаружить, когда ваш виджет отображается. Вызов QEvent::accept() или QEvent::ignore() на event не оказывает никакого эффекта.
См. также hideEvent(), QWidget::showEvent() и ItemVisibleChange.
[override virtual protected] QSizeF QGraphicsWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
Реализует: QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.
QStyle *QGraphicsWidget::style() const
Возвращает указатель на стиль виджета. Если у этого виджета нет явно назначенного стиля, вместо этого возвращается стиль сцены. В свою очередь, если у сцены нет назначенного стиля, эта функция возвращает QApplication::style().
См. также setStyle().
bool QGraphicsWidget::testAttribute(Qt::WidgetAttribute attribute) const
Возвращает true, если attribute включен для этого виджета; в противном случае возвращает false.
См. также setAttribute().
[override virtual] int QGraphicsWidget::type() const
Реализует: QGraphicsItem::type() const.
[virtual protected] void QGraphicsWidget::ungrabKeyboardEvent(QEvent *event)
Этот обработчик событий для event может быть переопределен в подклассе для получения уведомлений о событиях QEvent::UngrabKeyboard.
См. также ungrabKeyboard() и ungrabMouse().
[virtual protected] void QGraphicsWidget::ungrabMouseEvent(QEvent *event)
Этот обработчик событий для event может быть переопределен в подклассе для получения уведомлений о событиях QEvent::UngrabMouse.
См. также ungrabMouse() и ungrabKeyboard().
void QGraphicsWidget::unsetWindowFrameMargins()
Сбрасывает отступы рамки окна до значения по умолчанию, предоставленного стилем.
См. также setWindowFrameMargins(), getWindowFrameMargins() и windowFrameRect().
[override virtual protected] void QGraphicsWidget::updateGeometry()
Реализует: QGraphicsLayoutItem::updateGeometry().
Если этот виджет в настоящее время управляется макетом, эта функция уведомляет макет о том, что размеры подсказок виджета изменились, и макет может потребоваться соответственно изменить размер и расположение виджета.
Вызовите эту функцию, если размеры подсказок виджета sizeHint() изменились.
См. также QGraphicsLayout::invalidate().
[virtual protected] bool QGraphicsWidget::windowFrameEvent(QEvent *event)
Этот обработчик событий для event получает события для рамки окна, если этот виджет является окном. Его базовая реализация обеспечивает поддержку взаимодействия с рамкой окна по умолчанию, такой как перемещение, изменение размера и т.д.
Вы можете переопределить этот обработчик в подклассе QGraphicsWidget, чтобы предоставить собственную поддержку взаимодействия с рамкой окна.
Возвращает true, если event был распознан и обработан; в противном случае возвращает false.
См. также event().
QRectF QGraphicsWidget::windowFrameGeometry() const
Возвращает геометрию виджета в координатах родителя, включая любую рамку окна.
См. также windowFrameRect(), getWindowFrameMargins() и setWindowFrameMargins().
QRectF QGraphicsWidget::windowFrameRect() const
Возвращает локальную область виджета, включая любую рамку окна.
См. также windowFrameGeometry(), getWindowFrameMargins() и setWindowFrameMargins().
[virtual protected] Qt::WindowFrameSection QGraphicsWidget::windowFrameSectionAt(const QPointF &pos) const
Возвращает часть рамки окна в позиции pos или Qt::NoSection, если в этой позиции нет части рамки окна.
Эта функция используется в базовой реализации QGraphicsWidget для взаимодействия с рамкой окна.
Вы можете переопределить эту функцию, если хотите настроить, как окно можно интерактивно перемещать или изменять размер. Например, если вы хотите разрешить изменение размера окна только в правом нижнем углу, вы можете переопределить эту функцию, чтобы вернуть Qt::NoSection для всех разделов, кроме Qt::BottomRightSection.
См. также windowFrameEvent(), paintWindowFrame() и windowFrameGeometry().
Qt::WindowType QGraphicsWidget::windowType() const
Возвращает тип окна виджета.
См. также windowFlags(), isWindow() и isPanel().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qgraphicswidget.html