Класс QGraphicsItem
Класс QGraphicsItem является базовым классом для всех графических элементов в QGraphicsScene. Подробнее...
| Заголовок: | #include <QGraphicsItem> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследуется от: | QAbstractGraphicsShapeItem, QGraphicsItemGroup, QGraphicsLineItem, QGraphicsObject и QGraphicsPixmapItem |
Открытые типы
| Перечисление | CacheMode { NoCache, ItemCoordinateCache, DeviceCoordinateCache } |
| Перечисление | GraphicsItemChange { ItemEnabledChange, ItemEnabledHasChanged, ItemPositionChange, ItemPositionHasChanged, ItemTransformChange, …, ItemScenePositionHasChanged } |
| Перечисление | GraphicsItemFlag { ItemIsMovable, ItemIsSelectable, ItemIsFocusable, ItemClipsToShape, ItemClipsChildrenToShape, …, ItemContainsChildrenInShape } |
| Флаги | GraphicsItemFlags |
| Перечисление | PanelModality { NonModal, PanelModal, SceneModal } |
| Перечисление | anonymous { Type, UserType } |
Открытые функции
| QGraphicsItem(QGraphicsItem *parent = nullptr) | |
| virtual | ~QGraphicsItem() |
| bool | acceptDrops() const |
| bool | acceptHoverEvents() const |
| bool | acceptTouchEvents() const |
| Qt::MouseButtons | acceptedMouseButtons() const |
| virtual void | advance(int phase) |
| virtual QRectF | boundingRect() const = 0 |
| QRegion | boundingRegion(const QTransform &itemToDeviceTransform) const |
| qreal | boundingRegionGranularity() const |
| QGraphicsItem::CacheMode | cacheMode() const |
| QList<QGraphicsItem *> | childItems() const |
| QRectF | childrenBoundingRect() const |
| void | clearFocus() |
| QPainterPath | clipPath() const |
| virtual bool | collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
| virtual bool | collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
| QList<QGraphicsItem *> | collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const |
| QGraphicsItem * | commonAncestorItem(const QGraphicsItem *other) const |
| virtual bool | contains(const QPointF &point) const |
| QCursor | cursor() const |
| QVariant | data(int key) const |
| QTransform | deviceTransform(const QTransform &viewportTransform) const |
| qreal | effectiveOpacity() const |
| void | ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50) |
| void | ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50) |
| bool | filtersChildEvents() const |
| QGraphicsItem::GraphicsItemFlags | flags() const |
| QGraphicsItem * | focusItem() const |
| QGraphicsItem * | focusProxy() const |
| void | grabKeyboard() |
| void | grabMouse() |
| QGraphicsEffect * | graphicsEffect() const |
| QGraphicsItemGroup * | group() const |
| bool | hasCursor() const |
| bool | hasFocus() const |
| void | hide() |
| Qt::InputMethodHints | inputMethodHints() const |
| void | installSceneEventFilter(QGraphicsItem *filterItem) |
| bool | isActive() const |
| bool | isAncestorOf(const QGraphicsItem *child) const |
| bool | isBlockedByModalPanel(QGraphicsItem **blockingPanel = nullptr) const |
| bool | isClipped() const |
| bool | isEnabled() const |
| bool | isObscured(const QRectF &rect = QRectF()) const |
| bool | isObscured(qreal x, qreal y, qreal w, qreal h) const |
| virtual bool | isObscuredBy(const QGraphicsItem *item) const |
| bool | isPanel() const |
| bool | isSelected() const |
| bool | isUnderMouse() const |
| bool | isVisible() const |
| bool | isVisibleTo(const QGraphicsItem *parent) const |
| bool | isWidget() const |
| bool | isWindow() const |
| QTransform | itemTransform(const QGraphicsItem *other, bool *ok = nullptr) const |
| QPointF | mapFromItem(const QGraphicsItem *item, const QPointF &point) const |
| QPolygonF | mapFromItem(const QGraphicsItem *item, const QRectF &rect) const |
| QPolygonF | mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const |
| QPainterPath | mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const |
| QPointF | mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const |
| QPolygonF | mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
| QPointF | mapFromParent(const QPointF &point) const |
| QPolygonF | mapFromParent(const QRectF &rect) const |
| QPolygonF | mapFromParent(const QPolygonF &polygon) const |
| QPainterPath | mapFromParent(const QPainterPath &path) const |
| QPointF | mapFromParent(qreal x, qreal y) const |
| QPolygonF | mapFromParent(qreal x, qreal y, qreal w, qreal h) const |
| QPointF | mapFromScene(const QPointF &point) const |
| QPolygonF | mapFromScene(const QRectF &rect) const |
| QPolygonF | mapFromScene(const QPolygonF &polygon) const |
| QPainterPath | mapFromScene(const QPainterPath &path) const |
| QPointF | mapFromScene(qreal x, qreal y) const |
| QPolygonF | mapFromScene(qreal x, qreal y, qreal w, qreal h) const |
| QRectF | mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const |
| QRectF | mapRectFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
| QRectF | mapRectFromParent(const QRectF &rect) const |
| QRectF | mapRectFromParent(qreal x, qreal y, qreal w, qreal h) const |
| QRectF | mapRectFromScene(const QRectF &rect) const |
| QRectF | mapRectFromScene(qreal x, qreal y, qreal w, qreal h) const |
| QRectF | mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const |
| QRectF | mapRectToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
| QRectF | mapRectToParent(const QRectF &rect) const |
| QRectF | mapRectToParent(qreal x, qreal y, qreal w, qreal h) const |
| QRectF | mapRectToScene(const QRectF &rect) const |
| QRectF | mapRectToScene(qreal x, qreal y, qreal w, qreal h) const |
| QPointF | mapToItem(const QGraphicsItem *item, const QPointF &point) const |
| QPolygonF | mapToItem(const QGraphicsItem *item, const QRectF &rect) const |
| QPolygonF | mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const |
| QPainterPath | mapToItem(const QGraphicsItem *item, const QPainterPath &path) const |
| QPointF | mapToItem(const QGraphicsItem *item, qreal x, qreal y) const |
| QPolygonF | mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const |
| QPointF | mapToParent(const QPointF &point) const |
| QPolygonF | mapToParent(const QRectF &rect) const |
| QPolygonF | mapToParent(const QPolygonF &polygon) const |
| QPainterPath | mapToParent(const QPainterPath &path) const |
| QPointF | mapToParent(qreal x, qreal y) const |
| QPolygonF | mapToParent(qreal x, qreal y, qreal w, qreal h) const |
| QPointF | mapToScene(const QPointF &point) const |
| QPolygonF | mapToScene(const QRectF &rect) const |
| QPolygonF | mapToScene(const QPolygonF &polygon) const |
| QPainterPath | mapToScene(const QPainterPath &path) const |
| QPointF | mapToScene(qreal x, qreal y) const |
| QPolygonF | mapToScene(qreal x, qreal y, qreal w, qreal h) const |
| void | moveBy(qreal dx, qreal dy) |
| qreal | opacity() const |
| virtual QPainterPath | opaqueArea() const |
| virtual void | paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) = 0 |
| QGraphicsItem * | panel() const |
| QGraphicsItem::PanelModality | panelModality() const |
| QGraphicsItem * | parentItem() const |
| QGraphicsObject * | родительскийОбъект() const |
| QGraphicsWidget * | родительскийВиджет() const |
| QPointF | положение() const |
| void | удалитьФильтрСобытийСцены(QGraphicsItem *filterItem) |
| void | сброситьПреобразование() |
| qreal | уголПоворота() const |
| qreal | масштаб() const |
| QGraphicsScene * | сцена() const |
| QRectF | прямоугольникОграниченияСцены() const |
| QPointF | позицияНаСцене() const |
| QTransform | преобразованиеСцены() const |
| void | прокрутить(qreal dx, qreal dy, const QRectF &rect = QRectF()) |
| void | установитьПриниматьПеретаскивание(bool on) |
| void | установитьПриниматьСобытияНаведения(bool enabled) |
| void | установитьПриниматьСобытияПрикосновения(bool enabled) |
| void | установитьПринятыеКнопкиМыши(Qt::MouseButtons buttons) |
| void | установитьАктивным(bool active) |
| void | установитьТочностьОбластиОграничения(qreal granularity) |
| void | установитьРежимКэширования(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize()) |
| void | установитьКурсор(const QCursor &cursor) |
| void | установитьДанные(int key, const QVariant &value) |
| void | установитьВключенным(bool enabled) |
| void | фильтроватьСобытияПотомков(bool enabled) |
| void | установитьФлаг(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true) |
| void | установитьФлаги(QGraphicsItem::GraphicsItemFlags flags) |
| void | получитьФокус(Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | установитьПроксиФокуса(QGraphicsItem *item) |
| void | установитьГрафическийЭффект(QGraphicsEffect *effect) |
| void | установитьГруппу(QGraphicsItemGroup *group) |
| void | установитьПодсказкиВвода(Qt::InputMethodHints hints) |
| void | установитьНепрозрачность(qreal opacity) |
| void | установитьМодальностьПанели(QGraphicsItem::PanelModality panelModality) |
| void | установитьРодительскийЭлемент(QGraphicsItem *newParent) |
| void | установитьПоложение(const QPointF &pos) |
| void | установитьПоложение(qreal x, qreal y) |
| void | установитьУголПоворота(qreal angle) |
| void | установитьМасштаб(qreal factor) |
| void | установитьВыбранным(bool selected) |
| void | установитьПодсказку(const QString &toolTip) |
| void | установитьПреобразование(const QTransform &matrix, bool combine = false) |
| void | установитьТочкуНачалаПреобразования(const QPointF &origin) |
| void | установитьТочкуНачалаПреобразования(qreal x, qreal y) |
| void | установитьПреобразования(const QList<QGraphicsTransform *> &transformations) |
| void | установитьВидимым(bool visible) |
| void | установитьX(qreal x) |
| void | установитьY(qreal y) |
| void | установитьЗначениеZ(qreal z) |
| virtual QPainterPath | форма() const |
| void | показать() |
| void | поместитьПеред(const QGraphicsItem *sibling) |
| QGraphicsObject * | вОбъектГрафики() |
| const QGraphicsObject * | вОбъектГрафики() const |
| QString | подсказка() const |
| QGraphicsItem * | верхнийЭлемент() const |
| QGraphicsWidget * | верхнийВиджет() const |
| QTransform | преобразование() const |
| QPointF | точкаНачалаПреобразования() const |
| QList<QGraphicsTransform *> | преобразования() const |
| virtual int | тип() const |
| void | отпуститьКлавиатуру() |
| void | ungrabMouse() |
| void | unsetCursor() |
| void | update(const QRectF &rect = QRectF()) |
| void | update(qreal x, qreal y, qreal width, qreal height) |
| QGraphicsWidget * | window() const |
| qreal | x() const |
| qreal | y() const |
| qreal | zValue() const |
Protected Functions
| virtual void | contextMenuEvent(QGraphicsSceneContextMenuEvent *event) |
| virtual void | dragEnterEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dragLeaveEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dragMoveEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | dropEvent(QGraphicsSceneDragDropEvent *event) |
| virtual void | focusInEvent(QFocusEvent *event) |
| virtual void | focusOutEvent(QFocusEvent *event) |
| virtual void | hoverEnterEvent(QGraphicsSceneHoverEvent *event) |
| virtual void | hoverLeaveEvent(QGraphicsSceneHoverEvent *event) |
| virtual void | hoverMoveEvent(QGraphicsSceneHoverEvent *event) |
| virtual void | inputMethodEvent(QInputMethodEvent *event) |
| virtual QVariant | inputMethodQuery(Qt::InputMethodQuery query) const |
| virtual QVariant | itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) |
| virtual void | keyPressEvent(QKeyEvent *event) |
| virtual void | keyReleaseEvent(QKeyEvent *event) |
| virtual void | mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) |
| virtual void | mouseMoveEvent(QGraphicsSceneMouseEvent *event) |
| virtual void | mousePressEvent(QGraphicsSceneMouseEvent *event) |
| virtual void | mouseReleaseEvent(QGraphicsSceneMouseEvent *event) |
| void | prepareGeometryChange() |
| virtual bool | sceneEvent(QEvent *event) |
| virtual bool | sceneEventFilter(QGraphicsItem *watched, QEvent *event) |
| void | updateMicroFocus() |
| virtual void | wheelEvent(QGraphicsSceneWheelEvent *event) |
Related Non-Members
| T | qgraphicsitem_cast(QGraphicsItem *item) |
Detailed Description
Он предоставляет лёгкую основу для написания собственных пользовательских элементов. Это включает определение геометрии элемента, обнаружения столкновений, его реализации отрисовки и взаимодействия с элементом через обработчики событий. QGraphicsItem входит в состав Графической системы представления.
Для удобства Qt предоставляет набор стандартных графических элементов для наиболее распространённых форм. Это:
- QGraphicsEllipseItem предоставляет эллиптический элемент
- QGraphicsLineItem предоставляет линейный элемент
- QGraphicsPathItem предоставляет элемент произвольной траектории
- QGraphicsPixmapItem предоставляет элемент пиктограммы
- QGraphicsPolygonItem предоставляет элемент многоугольника
- QGraphicsRectItem предоставляет прямоугольный элемент
- QGraphicsSimpleTextItem предоставляет простой текстовый ярлык
- QGraphicsTextItem предоставляет расширенный текстовый элемент просмотра
Вся геометрическая информация элемента основана на его локальной системе координат. Позиция элемента, pos(), — единственная функция, которая не работает в локальных координатах, поскольку она возвращает позицию в координатах родительского элемента. Система координат графического представления подробно описывает систему координат.
Вы можете указать, должен ли элемент быть видимым (т.е., отображаться и принимать события), вызвав setVisible(). Скрытие элемента также скроет его потомков. Аналогично, вы можете включить или отключить элемент, вызвав setEnabled(). Если вы отключите элемент, все его потомки также будут отключены. По умолчанию элементы являются видимыми и включёнными. Чтобы переключить, выбран ли элемент или нет, сначала включите выбор, установив флаг ItemIsSelectable, а затем вызовите setSelected(). Обычно выбор переключается сценой в результате пользовательского взаимодействия.
Для написания собственного графического элемента вы сначала создаёте подкласс QGraphicsItem, а затем начинаете с реализации двух чисто виртуальных публичных функций: boundingRect(), которая возвращает приблизительную оценку области, нарисованной элементом, и paint(), которая реализует фактическое рисование. Например:
class SimpleItem : public QGraphicsItem
{
public:
QRectF boundingRect() const override
{
qreal penWidth = 1;
return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
20 + penWidth, 20 + penWidth);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) override
{
painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
}
}; Функция boundingRect() имеет много разных целей. QGraphicsScene использует boundingRect() для индексации элементов, а QGraphicsView использует её как для отсечения невидимых элементов, так и для определения области, которая должна быть перестроена при рисовании перекрывающихся элементов. Кроме того, механизмы обнаружения столкновений QGraphicsItem используют boundingRect() для предоставления эффективной отсечки. Более точный алгоритм обнаружения столкновений в collidesWithItem() основан на вызове shape(), который возвращает точный контур формы элемента в виде QPainterPath.
QGraphicsScene ожидает, что все элементы boundingRect() и shape() останутся неизменными, если не будет получено уведомление. Если вы хотите изменить геометрию элемента каким-либо образом, вы должны сначала вызвать prepareGeometryChange(), чтобы позволить QGraphicsScene обновить свои учётные данные.
Обнаружение столкновений может быть выполнено двумя способами:
- Переопределите shape(), чтобы вернуть точную форму для вашего элемента, и полагайтесь на стандартную реализацию collidesWithItem() для определения пересечения форм. Это может быть довольно дорого, если формы сложны.
- Переопределите collidesWithItem(), чтобы предоставить собственный алгоритм обнаружения столкновений между элементами и формами.
Функция contains() может быть вызвана для определения того, содержит ли элемент точку или нет. Эту функцию также можно переопределить в элементе. По умолчанию поведение contains() основано на вызове shape().
Элементы могут содержать другие элементы и также быть содержащимися другими элементами. Все элементы могут иметь родительский элемент и список дочерних элементов. Если у элемента нет родителя, его положение задаётся в координатах родителя (т.е. локальные координаты родителя). Родительские элементы передают своё положение и преобразование всем своим дочерним элементам.
Преобразования
QGraphicsItem поддерживает проективные преобразования помимо своего базового положения, pos(). Существует несколько способов изменить преобразование элемента. Для простых преобразований можно вызвать удобные функции setRotation() или setScale(), или передать любую матрицу преобразования в setTransform(). Для расширенного управления преобразованиями у вас также есть возможность задать несколько комбинированных преобразований, вызвав setTransformations().
Преобразования элементов накапливаются от родителя к дочернему элементу, поэтому если и родительский, и дочерний элементы повернуты на 90 градусов, общее преобразование дочернего элемента будет 180 градусов. Аналогично, если родительский элемент масштабируется в 2 раза больше своего исходного размера, его дочерние элементы также будут в два раза больше. Преобразование элемента не влияет на его собственную локальную геометрию; все функции геометрии (например, contains(), update() и все функции отображения) по-прежнему работают в локальных координатах. Для удобства QGraphicsItem предоставляет функции sceneTransform(), которая возвращает общую матрицу преобразования элемента (включая его положение и положения всех родителей и их преобразований), и scenePos(), которая возвращает его положение в координатах сцены. Для сброса матрицы элемента вызовите resetTransform().
Некоторые операции преобразования дают разный результат в зависимости от порядка их применения. Например, если вы масштабируете и затем поворачиваете преобразование, вы можете получить другой результат, чем если бы преобразование сначала повернули. Однако порядок установки свойств преобразования в QGraphicsItem не влияет на результирующее преобразование; QGraphicsItem всегда применяет свойства в фиксированном, определенном порядке:
- Применяется базовое преобразование элемента (transform())
- Список преобразований элемента применяется в порядке (transformations())
- Элемент поворачивается относительно точки начала преобразования (rotation(), transformOriginPoint())
- Элемент масштабируется относительно точки начала преобразования (scale(), transformOriginPoint())
Отрисовка
Функция paint() вызывается QGraphicsView для отрисовки содержимого элемента. У элемента нет фона или заполнения по умолчанию; всё, что находится за элементом, будет отображаться во всех областях, которые не были явно отрисованы в этой функции. Вы можете вызвать update(), чтобы запланировать перерисовку, при желании передав прямоугольник, который нужно перерисовать. В зависимости от того, виден ли элемент в представлении, элемент может быть или не быть перерисован; нет эквивалента QWidget::repaint() в QGraphicsItem.
Элементы отрисовываются представлением, начиная с родительских элементов, а затем отрисовываются дочерние элементы, в порядке возрастания порядка наложения. Вы можете задать порядок наложения элемента, вызвав setZValue(), и проверить его, вызвав zValue(), где элементы с низкими значениями z рисуются перед элементами с высокими значениями z. Порядок наложения относится к элементам-сиблингам; родители всегда рисуются до своих детей.
Сортировка
Все элементы рисуются в определенном, стабильном порядке, и этот же порядок определяет, какие элементы получат ввод мыши первыми при нажатии на сцену. Обычно вам не нужно беспокоиться о сортировке, так как элементы следуют «естественному порядку», следуя логической структуре сцены.
Дочерние элементы элемента накладываются поверх родительского элемента, а элементы-сиблинги накладываются в порядке вставки (т.е. в том же порядке, в котором они были добавлены либо на сцену, либо в тот же родитель). Если вы добавляете элемент A, а затем B, то B будет поверх A. Если затем вы добавите C, порядок наложения элементов будет A, затем B, затем C.
В этом примере показан порядок наложения всех конечностей робота из примера Drag and Drop Robot. Туловище является корневым элементом (все остальные элементы являются дочерними или потомками туловища), поэтому оно отображается первым. Затем рисуется голова, так как это первый элемент в списке дочерних элементов туловища. Затем рисуется левая верхняя рука. Поскольку нижняя рука является дочерним элементом верхней руки, затем рисуется нижняя рука, за ней следуют следующий элемент-сиблинг верхней руки, которая является правой верхней рукой, и так далее.
Для опытных пользователей есть способы изменить способ сортировки ваших элементов:
- Вы можете вызвать setZValue() для элемента, чтобы явно расположить его поверх или под другими элементами-сиблингами. Значение Z по умолчанию для элемента равно 0. Элементы с одинаковым значением Z накладываются в порядке вставки.
- Вы можете вызвать stackBefore(), чтобы переупорядочить список дочерних элементов. Это напрямую изменит порядок вставки.
- Вы можете установить флаг ItemStacksBehindParent, чтобы расположить дочерний элемент позади его родительского элемента.
Порядок наложения двух элементов-сиблингов также учитывается для каждого дочернего и потомка каждого элемента. Таким образом, если один элемент расположен поверх другого, то все его дочерние элементы также будут расположены поверх всех дочерних элементов другого элемента.
События
QGraphicsItem получает события от QGraphicsScene через виртуальную функцию sceneEvent(). Эта функция распределяет наиболее распространенные события по набору удобных обработчиков событий:
- contextMenuEvent() обрабатывает события контекстного меню
- focusInEvent() и focusOutEvent() обрабатывают события получения и потери фокуса
- hoverEnterEvent(), hoverMoveEvent() и hoverLeaveEvent() обрабатывают события ввода, перемещения и выхода с области наведения
- inputMethodEvent() обрабатывает входные события для поддержки доступности
- keyPressEvent() и keyReleaseEvent() обрабатывают события нажатия и отпускания клавиш
- mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent() и mouseDoubleClickEvent() обрабатывают события нажатия, перемещения, отпускания, клика и двойного щелчка мыши
Вы можете фильтровать события для любого другого элемента, установив фильтры событий. Эта функциональность отделена от стандартных фильтров событий Qt (см. QObject::installEventFilter()), которые работают только с подклассами QObject. После установки вашего элемента в качестве фильтра событий для другого элемента, вызвав installSceneEventFilter(), отфильтрованные события будут получены виртуальной функцией sceneEventFilter(). Вы можете удалить фильтры событий элемента, вызвав removeSceneEventFilter().
Данные пользователя
Иногда бывает полезно регистрировать пользовательские данные с элементом, будь то пользовательский элемент или стандартный элемент. Вы можете вызвать setData() для любого элемента, чтобы сохранить данные в нём с помощью пары ключ-значение (ключ — целое число, а значение — QVariant). Чтобы получить пользовательские данные из элемента, вызовите data(). Эта функциональность совершенно не затрагивается Qt; она предоставляется для удобства пользователя.
См. также QGraphicsScene, QGraphicsView и Графический фреймворк представления.
Документация по типам членов
Перечисление QGraphicsItem::CacheMode
Это перечисление описывает режимы кеширования QGraphicsItem. Кеширование используется для ускорения отрисовки путём выделения и отрисовки в буфере пикселей вне экрана, который можно повторно использовать, когда элемент требует перерисовки. Для некоторых устройств отрисовки кеш хранится непосредственно в графической памяти, что делает отрисовку очень быстрой.
| Константа | Значение | Описание |
|---|---|---|
QGraphicsItem::NoCache |
0 |
По умолчанию; все кеширование элементов отключено. QGraphicsItem::paint() вызывается каждый раз, когда элемент требует перерисовки. |
QGraphicsItem::ItemCoordinateCache |
1 |
Кеширование включено для логической (локальной) системы координат элемента. QGraphicsItem создаёт буфер пикселей вне экрана с настраиваемым размером/разрешением, который вы можете передать в QGraphicsItem::setCacheMode(). Качество отрисовки, как правило, ухудшится в зависимости от разрешения кеша и преобразования элемента. В первый раз при перерисовке элемента он будет отрисован в кеш, и кеш затем будет повторно использован для каждой последующей отрисовки. Кеш также повторно используется по мере преобразования элемента. Для изменения разрешения кеша вы можете снова вызвать setCacheMode(). |
QGraphicsItem::DeviceCoordinateCache |
2 |
Кеширование включено на уровне устройства отрисовки, в координатах устройства. Этот режим предназначен для элементов, которые могут перемещаться, но не поворачиваться, масштабироваться или сдвигаться. Если элемент преобразуется непосредственно или косвенно, кеш будет автоматически пересоздан. В отличие от ItemCoordinateCacheMode, DeviceCoordinateCache всегда отрисовывает с максимальным качеством. |
См. также QGraphicsItem::setCacheMode().
Перечисление QGraphicsItem::GraphicsItemChange
Этот перечисление описывает изменения состояния, о которых уведомляет QGraphicsItem::itemChange(). Уведомления отправляются по мере изменения состояния, и в некоторых случаях могут быть внесены корректировки (см. документацию по каждому изменению для получения подробностей).
Примечание: Будьте осторожны при вызове функций самого QGraphicsItem внутри itemChange(), так как определенные вызовы функций могут привести к нежелательной рекурсии. Например, вы не можете вызвать setPos() в itemChange() при уведомлении ItemPositionChange, так как функция setPos() снова вызовет itemChange(ItemPositionChange). Вместо этого вы можете вернуть новые, скорректированные координаты из itemChange().
| Константа | Значение | Описание |
|---|---|---|
QGraphicsItem::ItemEnabledChange |
3 |
Состояние включения/выключения элемента меняется. Если элемент сейчас включен, он станет выключенным, и наоборот. Аргумент value — новое состояние включения (т.е., true или false). Не вызывайте setEnabled() в itemChange(), так как это уведомление уже доставлено. Вместо этого вы можете вернуть новое состояние из itemChange(). |
QGraphicsItem::ItemEnabledHasChanged |
13 |
Состояние включения/выключения элемента изменилось. Аргумент value — новое состояние включения (т.е., true или false). Не вызывайте setEnabled() в itemChange(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemPositionChange |
0 |
Изменяется положение элемента. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен, и когда локальное положение элемента относительно родителя изменяется (т.е., в результате вызова setPos() или moveBy()). Аргумент value — новое положение (т.е., QPointF). Вы можете вызвать pos(), чтобы получить исходное положение. Не вызывайте setPos() или moveBy() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новое, скорректированное положение из itemChange(). После этого уведомления элемент QGraphicsItem немедленно отправляет уведомление ItemPositionHasChanged, если положение изменилось. |
QGraphicsItem::ItemPositionHasChanged |
9 |
Положение элемента изменилось. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен и после изменения локального положения элемента относительно родителя. Аргумент value — новое положение (то же, что и pos()), и элемент QGraphicsItem игнорирует возвращаемое значение для этого уведомления (т.е., только для чтения). |
QGraphicsItem::ItemTransformChange |
8 |
Матрица преобразования элемента изменяется. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен и при изменении локальной матрицы преобразования элемента (например, в результате вызова setTransform()). Аргумент value — новая матрица (т.е., QTransform); для получения старой матрицы используйте transform(). Не вызывайте setTransform() или не изменяйте свойства преобразования в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новую матрицу из itemChange(). Это уведомление не отправляется, если вы меняете свойства преобразования. |
QGraphicsItem::ItemTransformHasChanged |
10 |
Матрица преобразования элемента изменилась, либо потому, что вызван setTransform, либо изменено одно из свойств преобразования. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен и после изменения локальной матрицы преобразования элемента. Аргумент value — новая матрица (такая же, как transform()), и элемент QGraphicsItem игнорирует возвращаемое значение для этого уведомления (т.е., только для чтения). |
QGraphicsItem::ItemRotationChange |
28 |
Изменяется свойство поворота элемента. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен, и при изменении свойства поворота элемента (например, при вызове setRotation()). Аргумент value — новый угол поворота (число типа double); для получения старого угла используйте rotation(). Не вызывайте setRotation() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новый угол поворота из itemChange(). |
QGraphicsItem::ItemRotationHasChanged |
29 |
Свойство поворота элемента изменилось. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен, и после изменения свойства поворота элемента. Аргумент value — новый угол поворота (число типа double), и элемент QGraphicsItem игнорирует возвращаемое значение для этого уведомления (т.е., только для чтения). Не вызывайте setRotation() в itemChange(), так как это уведомление уже доставлено. |
QGraphicsItem::ItemScaleChange |
30 |
Изменяется свойство масштаба элемента. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен и при изменении свойства масштаба элемента (например, при вызове setScale()). Аргумент value — новый масштаб (число типа double); для получения старого масштаба используйте scale(). Не вызывайте setScale() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новый масштаб из itemChange(). |
QGraphicsItem::ItemScaleHasChanged |
31 |
Свойство масштаба элемента изменилось. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен, и после изменения свойства масштаба элемента. Аргумент value — новый масштаб (число типа double), и элемент QGraphicsItem игнорирует возвращаемое значение для этого уведомления (т.е., только для чтения). Не вызывайте setScale() в itemChange(), так как это уведомление уже доставлено. |
QGraphicsItem::ItemTransformOriginPointChange |
32 |
Изменяется свойство точки начала преобразования элемента. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен и при изменении свойства точки начала преобразования элемента (например, при вызове setTransformOriginPoint()). Аргумент value — новая точка начала преобразования (т.е., QPointF); для получения старой точки используйте transformOriginPoint(). Не вызывайте setTransformOriginPoint() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новую точку начала преобразования из itemChange(). |
QGraphicsItem::ItemTransformOriginPointHasChanged |
33 |
Свойство точки начала преобразования элемента изменилось. Это уведомление отправляется, если флаг ItemSendsGeometryChanges включен, и после изменения свойства точки начала преобразования элемента. Аргумент value — новая точка начала преобразования (т.е., QPointF), и элемент QGraphicsItem игнорирует возвращаемое значение для этого уведомления (т.е., только для чтения). Не вызывайте setTransformOriginPoint() в itemChange(), так как это уведомление уже доставлено. |
QGraphicsItem::ItemSelectedChange |
4 |
Состояние выделения элемента меняется. Если элемент сейчас выделен, он станет невыделенным, и наоборот. Аргумент value — новое состояние выделения (true или false). Не вызывайте setSelected() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новое состояние выделения из itemChange(). |
QGraphicsItem::ItemSelectedHasChanged |
14 |
Состояние выделения элемента изменилось. Аргумент value — новое состояние выделения (true или false). Не вызывайте setSelected() в itemChange(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemVisibleChange |
2 |
Состояние видимости элемента меняется. Если элемент сейчас видим, он станет невидимым, и наоборот. Аргумент value — новое состояние видимости (true или false). Не вызывайте setVisible() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новое состояние видимости из itemChange(). |
QGraphicsItem::ItemVisibleHasChanged |
12 |
Состояние видимости элемента изменилось. Аргумент value — новое состояние видимости (true или false). Не вызывайте setVisible() в itemChange(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemParentChange |
5 |
Родительский элемент изменяется. Аргумент value — новый родительский элемент (т.е., указатель на QGraphicsItem). Не вызывайте setParentItem() в itemChange(), так как это уведомление уже доставлено; вместо этого вы можете вернуть нового родителя из itemChange(). |
QGraphicsItem::ItemParentHasChanged |
15 |
Родительский элемент изменился. Аргумент value — новый родитель (т.е., указатель на QGraphicsItem). Не вызывайте setParentItem() в itemChange(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemChildAddedChange |
6 |
К этому элементу добавлен дочерний элемент. Аргумент value — новый дочерний элемент (т.е., указатель на QGraphicsItem). Не передавайте этот элемент в функцию setParentItem() любого элемента, так как это уведомление уже доставлено. Значение возврата не используется; вы не можете ничего изменить в этом уведомлении. Обратите внимание, что новый дочерний элемент может быть не полностью сконструирован к моменту отправки этого уведомления; вызов чисто виртуальных функций дочернего элемента может привести к сбою. |
QGraphicsItem::ItemChildRemovedChange |
7 |
Дочерний элемент удален из этого элемента. Аргумент value — дочерний элемент, который вот-вот будет удален (т.е., указатель на QGraphicsItem). Значение возврата не используется; вы не можете ничего изменить в этом уведомлении. |
QGraphicsItem::ItemSceneChange |
11 |
Элемент перемещён в новую сцену. Это уведомление также отправляется, когда элемент добавляется в исходную сцену и когда он удаляется. Сцена элемента — это старая сцена или nullptr, если элемент ещё не добавлен в сцену. Аргумент value — новая сцена (т.е., указатель на QGraphicsScene), или nullptr, если элемент удалён из сцены. Не переопределяйте это изменение, передавая этот элемент в QGraphicsScene::addItem(), так как это уведомление уже доставлено; вместо этого вы можете вернуть новую сцену из itemChange(). Используйте эту функцию с осторожностью; возражение против изменения сцены может быстро привести к нежелательной рекурсии. |
QGraphicsItem::ItemSceneHasChanged |
16 |
Сцена элемента изменилась. Сцена элемента — это новая сцена. Это уведомление также отправляется, когда элемент добавляется в исходную сцену и когда он удаляется. Аргумент value — новая сцена (т.е., указатель на QGraphicsScene). Не вызывайте setScene() в itemChange(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemCursorChange |
17 |
Курсор элемента изменяется. Аргумент value — новый курсор (т.е., QCursor). Не вызывайте setCursor() в itemChange(), так как это уведомление уже доставлено. Вместо этого вы можете вернуть новый курсор из itemChange(). |
QGraphicsItem::ItemCursorHasChanged |
18 |
Курсор элемента изменился. Аргумент value — новый курсор (т.е., QCursor). Не вызывайте setCursor(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemToolTipChange |
19 |
Подсказка элемента изменяется. Аргумент value — новая подсказка (т.е., QToolTip). Не вызывайте setToolTip() в itemChange(), так как это уведомление уже доставлено. Вместо этого вы можете вернуть новую подсказку из itemChange(). |
QGraphicsItem::ItemToolTipHasChanged |
20 |
Подсказка элемента изменилась. Аргумент value — новая подсказка (т.е., QToolTip). Не вызывайте setToolTip(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemFlagsChange |
21 |
Флаги элемента изменяются. Аргумент value — новые флаги (т.е., quint32). Не вызывайте setFlags() в itemChange(), так как это уведомление уже доставлено. Вместо этого вы можете вернуть новые флаги из itemChange(). |
QGraphicsItem::ItemFlagsHaveChanged |
22 |
Флаги элемента изменились. Аргумент value — новые флаги (т.е., quint32). Не вызывайте setFlags() в itemChange(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemZValueChange |
23 |
Значение Z элемента изменяется. Аргумент value — новое значение Z (т.е., double). Не вызывайте setZValue() в itemChange(), так как это уведомление уже доставлено. Вместо этого вы можете вернуть новое значение Z из itemChange(). |
QGraphicsItem::ItemZValueHasChanged |
24 |
Значение Z элемента изменилось. Аргумент value — новое значение Z (т.е., double). Не вызывайте setZValue(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemOpacityChange |
25 |
Изменяется непрозрачность элемента. Аргумент value — новая непрозрачность (т.е., double). Не вызывайте setOpacity() в itemChange(), так как это уведомление уже доставлено. Вместо этого вы можете вернуть новую непрозрачность из itemChange(). |
QGraphicsItem::ItemOpacityHasChanged |
26 |
Непрозрачность элемента изменилась. Аргумент value — новая непрозрачность (т.е., double). Не вызывайте setOpacity(), так как это уведомление уже доставлено. Значение возврата игнорируется. |
QGraphicsItem::ItemScenePositionHasChanged |
27 |
Изменилась позиция элемента в сцене. Это уведомление отправляется, если установлен флаг ItemSendsScenePositionChanges, и после изменения позиции элемента в сцене (т.е., изменилась позиция или преобразование самого элемента, или позиция или преобразование любого предка). Аргумент value — новая позиция в сцене (то же, что и scenePos()), и QGraphicsItem игнорирует значение возврата для этого уведомления (т.е., уведомление только для чтения). |
enum QGraphicsItem::GraphicsItemFlagflags QGraphicsItem::GraphicsItemFlags
Этот перечисление описывает различные флаги, которые вы можете установить на элементе, чтобы изменить различные функции в поведении элемента.
Все флаги по умолчанию отключены.
| Постоянная | Значение | Описание |
|---|---|---|
QGraphicsItem::ItemIsMovable |
0x1 |
Элемент поддерживает интерактивное перемещение с помощью мыши. Нажав на элемент и перетащив его, элемент будет перемещаться вместе с курсором мыши. Если у элемента есть дочерние элементы, все дочерние элементы также перемещаются. Если элемент является частью выделения, все выделенные элементы также перемещаются. Эта функция предоставляется как удобство через базовую реализацию обработчиков событий мыши QGraphicsItem. |
QGraphicsItem::ItemIsSelectable |
0x2 |
Элемент поддерживает выделение. Включение этой функции позволит setSelected() переключать выделение для элемента. Это также позволит элементу быть выделенным автоматически в результате вызова QGraphicsScene::setSelectionArea(), щелчка по элементу или с помощью выделения резиновой лентой в QGraphicsView. |
QGraphicsItem::ItemIsFocusable |
0x4 |
Элемент поддерживает фокус ввода с клавиатуры (т.е., это элемент ввода). Включение этого флага позволит элементу принимать фокус, что, в свою очередь, позволит передавать события клавиш в QGraphicsItem::keyPressEvent() и QGraphicsItem::keyReleaseEvent(). |
QGraphicsItem::ItemClipsToShape |
0x8 |
Элемент обрезается до собственной формы. Элемент не может отрисовывать или получать события мыши, планшета, перетаскивания и наведения на элемент за пределами его формы. По умолчанию отключено. Это поведение контролируется QGraphicsView::drawItems() или QGraphicsScene::drawItems(). Этот флаг был добавлен в Qt 4.3. |
QGraphicsItem::ItemClipsChildrenToShape |
0x10 |
Элемент обрезает отрисовку всех своих потомков до собственной формы. Элементы, являющиеся прямыми или косвенными потомками этого элемента, не могут отрисовываться за пределами формы этого элемента. По умолчанию этот флаг отключён; дочерние элементы могут отрисовываться в любом месте. Это поведение контролируется QGraphicsView::drawItems() или QGraphicsScene::drawItems(). Этот флаг был добавлен в Qt 4.3. |
Примечание: Этот флаг похож на ItemContainsChildrenInShape, но, помимо этого, он обеспечивает соответствие, обрезая дочерние элементы.
| Константа | Значение | Описание |
|---|---|---|
QGraphicsItem::ItemIgnoresTransformations |
0x20 |
Элемент игнорирует унаследованные преобразования (т.е., его положение всё ещё привязано к родителю, но преобразования поворота, масштабирования или сдвига родителя или представления игнорируются). Этот флаг полезен для сохранения горизонтальности и неизменного масштаба элементов меток текста, чтобы они оставались читаемыми, если представление преобразуется. При установке этого флага геометрия элемента в представлении и геометрия сцены будут поддерживаться раздельно. Необходимо вызвать deviceTransform(), чтобы сопоставить координаты и обнаружить столкновения в представлении. По умолчанию этот флаг отключён. Этот флаг был представлен в Qt 4.3. |
Примечание: При установке этого флага вы всё ещё можете масштабировать сам элемент, и это преобразование масштабирования повлияет на дочерние элементы.
| Константа | Значение | Описание |
|---|---|---|
QGraphicsItem::ItemIgnoresParentOpacity |
0x40 |
Элемент игнорирует непрозрачность родителя. Эффективная непрозрачность элемента совпадает с его собственной непрозрачностью; она не комбинируется с непрозрачностью родителя. Этот флаг позволяет вашему элементу сохранять абсолютную непрозрачность даже если родитель полупрозрачен. Этот флаг был представлен в Qt 4.5. |
QGraphicsItem::ItemDoesntPropagateOpacityToChildren |
0x80 |
Элемент не распространяет свою непрозрачность на свои дочерние элементы. Этот флаг позволяет создавать полупрозрачный элемент, который не влияет на непрозрачность его дочерних элементов. Этот флаг был представлен в Qt 4.5. |
QGraphicsItem::ItemStacksBehindParent |
0x100 |
Элемент расположен позади своего родителя. По умолчанию дочерние элементы располагаются сверху родительского элемента. Но установив этот флаг, дочерний элемент будет расположен позади него. Этот флаг полезен для эффектов теней и для декоративных объектов, которые следуют за геометрией родительского элемента, не рисуя поверх него. Этот флаг был представлен в Qt 4.5. |
QGraphicsItem::ItemUsesExtendedStyleOption |
0x200 |
Элемент использует exposedRect в QStyleOptionGraphicsItem. По умолчанию, exposedRect инициализируется с boundingRect() элемента. Вы можете включить этот флаг, чтобы параметры стиля настраивались с более тонкими значениями. Используйте QStyleOptionGraphicsItem::levelOfDetailFromTransform(), если вам нужно более высокое значение. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemHasNoContents |
0x400 |
Элемент ничего не рисует (т.е., вызов paint() на элементе не имеет эффекта). Вы должны установить этот флаг для элементов, которым не нужно рисование, чтобы убедиться, что Вид Графики избегает ненужной подготовки рисования. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemSendsGeometryChanges |
0x800 |
Элемент включает уведомления itemChange() для ItemPositionChange, ItemPositionHasChanged, ItemTransformChange, ItemTransformHasChanged, ItemRotationChange, ItemRotationHasChanged, ItemScaleChange, ItemScaleHasChanged, ItemTransformOriginPointChange и ItemTransformOriginPointHasChanged. По соображениям производительности эти уведомления отключены по умолчанию. Вы должны включить этот флаг, чтобы получать уведомления об изменениях положения и преобразований. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemAcceptsInputMethod |
0x1000 |
Элемент поддерживает методы ввода, обычно используемые для азиатских языков. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemNegativeZStacksBehindParent |
0x2000 |
Элемент автоматически располагается позади родительского элемента, если его значение z отрицательное. Этот флаг позволяет setZValue() переключать ItemStacksBehindParent. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemIsPanel |
0x4000 |
Элемент представляет собой панель. Панель предоставляет обработку активации и фокуса. Одновременно может быть активна только одна панель (см. QGraphicsItem::isActive()). Когда ни одна панель не активна, QGraphicsScene активирует все элементы, не являющиеся панелями. Элементы окна (т.е., QGraphicsItem::isWindow() возвращает true) являются панелями. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemSendsScenePositionChanges |
0x10000 |
Элемент включает уведомления itemChange() для ItemScenePositionHasChanged. По соображениям производительности эти уведомления отключены по умолчанию. Вы должны включить этот флаг, чтобы получать уведомления об изменениях положения в сцене. Этот флаг был представлен в Qt 4.6. |
QGraphicsItem::ItemContainsChildrenInShape |
0x80000 |
Этот флаг указывает, что все прямые и косвенные дочерние элементы элемента рисуются только в пределах формы элемента. В отличие от ItemClipsChildrenToShape, это ограничение не применяется. Установите ItemContainsChildrenInShape, когда вы вручную обеспечиваете, что отрисовка ограничена формой элемента и хотите избежать затрат, связанных с применением обрезки. Установка этого флага позволяет повысить эффективность отрисовки и обнаружения столкновений. Флаг отключен по умолчанию. |
Примечание: Если оба флага, этот и ItemClipsChildrenToShape, установлены, обрезка будет применена. Это эквивалентно просто установке ItemClipsChildrenToShape.
Этот флаг был представлен в Qt 5.4.
Тип GraphicsItemFlags — это псевдоним для QFlags<GraphicsItemFlag>. Он хранит логическое ИЛИ сочетание значений GraphicsItemFlag.
перечисление QGraphicsItem::PanelModality
Это перечисление определяет поведение модальной панели. Модальная панель — это панель, которая блокирует вход в другие панели. Обратите внимание, что элементы, которые являются дочерними элементами модальной панели, не блокируются.
Значения:
| Константа | Значение | Описание |
|---|---|---|
QGraphicsItem::NonModal |
0 |
Панель не является модальной и не блокирует вход в другие панели. Это значение по умолчанию для панелей. |
QGraphicsItem::PanelModal |
1 |
Панель является модальной для иерархии элементов и блокирует вход в родительский контейнер, все родительские панели и всех братьев и сестёр родительской и родительских панелей. |
QGraphicsItem::SceneModal |
2 |
Окно является модальным для всей сцены и блокирует вход во все панели. |
См. также QGraphicsItem::setPanelModality(), QGraphicsItem::panelModality() и QGraphicsItem::ItemIsPanel.
перечисление QGraphicsItem::anonymous
Значение, возвращаемое виртуальной функцией type() в стандартных классах графических элементов в Qt. Все такие стандартные классы графических элементов в Qt связаны с уникальным значением для Type, например, значение, возвращаемое QGraphicsPathItem::type(), равно 2.
| Константа | Значение | Описание |
|---|---|---|
QGraphicsItem::Type |
1 |
class QGraphicsPathItem : public QAbstractGraphicsShapeItem
{
public:
enum { Type = 2 };
int type() const override { return Type; }
...
}; |
QGraphicsItem::UserType |
65536 |
Наименьшее значение, возвращаемое виртуальной функцией type() для пользовательских подклассов QGraphicsItem.class CustomItem : public QGraphicsItem
{
public:
enum { Type = UserType + 1 };
int type() const override
{
// Enable the use of qgraphicsitem_cast with this item.
return Type;
}
...
}; |
Документация функций-членов
QGraphicsItem::QGraphicsItem(QGraphicsItem *parent = nullptr)
Конструирует QGraphicsItem с заданным элементом parent. Он не изменяет родительский объект, возвращаемый QObject::parent().
Если parent равен nullptr, вы можете добавить элемент на сцену, вызвав QGraphicsScene::addItem(). Тогда элемент станет верхнеуровневым элементом.
См. также QGraphicsScene::addItem() и setParentItem().
[virtual] QGraphicsItem::~QGraphicsItem()
Удаляет QGraphicsItem и все его дочерние элементы. Если этот элемент в данный момент связан со сценой, он будет удалён со сцены перед удалением.
Примечание: Более эффективно удалить элемент из QGraphicsScene перед удалением элемента.
bool QGraphicsItem::acceptDrops() const
Возвращает true, если этот элемент может принимать события перетаскивания и опускания; в противном случае возвращает false. По умолчанию элементы не принимают события перетаскивания и опускания; элементы прозрачны для перетаскивания и опускания.
См. также setAcceptDrops().
bool QGraphicsItem::acceptHoverEvents() const
Возвращает true, если элемент принимает события наведения (QGraphicsSceneHoverEvent); в противном случае, возвращает false. По умолчанию, элементы не принимают события наведения.
См. также setAcceptHoverEvents() и setAcceptedMouseButtons().
bool QGraphicsItem::acceptTouchEvents() const
Возвращает true, если элемент принимает события касания; в противном случае, возвращает false. По умолчанию, элементы не принимают события касания.
См. также setAcceptTouchEvents().
Qt::MouseButtons QGraphicsItem::acceptedMouseButtons() const
Возвращает кнопки мыши, для которых этот элемент принимает события мыши. По умолчанию, принимаются все кнопки мыши.
Если элемент принимает кнопку мыши, он станет элементом захвата мыши при получении события нажатия для этой кнопки мыши. Однако, если элемент не принимает кнопку, QGraphicsScene перенаправит события мыши первому элементу под ним, который это делает.
См. также setAcceptedMouseButtons() и mousePressEvent().
[virtual] void QGraphicsItem::advance(int phase)
Этот виртуальный метод вызывается дважды для всех элементов слотом QGraphicsScene::advance(). В первой фазе все элементы вызываются с phase == 0, что указывает на то, что элементы на сцене собираются продвинуться, а затем все элементы вызываются с phase == 1. Переопределите этот метод, чтобы обновить свой элемент, если вам нужна простая анимация, контролируемая сценой.
По умолчанию метод ничего не делает.
Этот метод предназначен для анимации. Альтернативой является множественное наследование от QObject и QGraphicsItem и использование Фреймворка анимации.
См. также QGraphicsScene::advance() и QTimeLine.
[pure virtual] QRectF QGraphicsItem::boundingRect() const
Этот чистый виртуальный метод определяет внешние границы элемента в виде прямоугольника; вся отрисовка должна быть ограничена внутри прямоугольника границ элемента. QGraphicsView использует это для определения того, требует ли элемент перерисовки.
Хотя форма элемента может быть произвольной, прямоугольник границ всегда прямоугольный и не зависит от преобразования элементов.
Если вы хотите изменить прямоугольник границ элемента, вы должны сначала вызвать prepareGeometryChange(). Это уведомляет сцену о предстоящем изменении, чтобы она могла обновить индекс геометрии элемента; в противном случае сцена не будет знать о новой геометрии элемента, и результаты будут неопределёнными (как правило, остаются артефакты рендеринга в представлении).
Переопределите этот метод, чтобы QGraphicsView определил, какие части виджета, если таковые имеются, необходимо перерисовать.
Примечание: для форм, которые рисуют контур/штрих, важно включить половину ширины пера в прямоугольник границ. Не нужно учитывать антиалиазинг.
Пример:
QRectF CircleItem::boundingRect() const
{
qreal penWidth = 1;
return QRectF(-radius - penWidth / 2, -radius - penWidth / 2,
diameter + penWidth, diameter + penWidth);
} См. также boundingRegion(), shape(), contains(), Система координат графического представления и prepareGeometryChange().
QRegion QGraphicsItem::boundingRegion(const QTransform &itemToDeviceTransform) const
Возвращает область границ для этого элемента. Координатное пространство возвращаемой области зависит от itemToDeviceTransform. Если вы передадите тождественное преобразование QTransform в качестве параметра, этот метод вернёт область в локальных координатах.
Область границ описывает грубую контурную линию визуального содержимого элемента. Хотя её вычисление дорогостоящее, оно также более точное, чем boundingRect(), и может помочь избежать ненужной перерисовки при обновлении элемента. Это особенно эффективно для тонких элементов (например, линий или простых многоугольников). Вы можете настроить зернистость для области границ, вызвав setBoundingRegionGranularity(). Значение по умолчанию равно 0; в этом случае область границ элемента совпадает с его прямоугольником границ.
itemToDeviceTransform — преобразование из координат элемента в координаты устройства. Если вы хотите, чтобы этот метод возвращал QRegion в координатах сцены, вы можете передать sceneTransform() в качестве аргумента.
См. также boundingRegionGranularity().
qreal QGraphicsItem::boundingRegionGranularity() const
Возвращает зернистость области границ элемента; значение между и включая 0 и 1. Значение по умолчанию равно 0 (т.е. наименьшая зернистость, где область границ соответствует прямоугольнику границ элемента).
См. также setBoundingRegionGranularity().
QGraphicsItem::CacheMode QGraphicsItem::cacheMode() const
Возвращает режим кеширования для этого элемента. Режим по умолчанию — NoCache (т.е. кеширование отключено и вся отрисовка производится немедленно).
См. также setCacheMode().
QList<QGraphicsItem *> QGraphicsItem::childItems() const
Возвращает список дочерних элементов этого элемента.
Элементы отсортированы по порядку стека. Это учитывает как порядок вставки элементов, так и их значения Z.
См. также setParentItem(), zValue() и Сортировка.
QRectF QGraphicsItem::childrenBoundingRect() const
Возвращает прямоугольник границ потомков этого элемента (т.е. его детей, их детей и т.д.) в локальных координатах. Прямоугольник будет содержать всех потомков после их отображения в локальных координатах. Если у элемента нет детей, этот метод возвращает пустой QRectF.
Это не включает собственный прямоугольник границ этого элемента; он возвращает только накопленный прямоугольник границ его потомков. Если вам нужно включить прямоугольник границ этого элемента, вы можете добавить boundingRect() к childrenBoundingRect() с помощью QRectF::operator|().
Этот метод имеет линейную сложность; он определяет размер возвращаемого прямоугольника границ, перебирая всех потомков.
См. также boundingRect() и sceneBoundingRect().
void QGraphicsItem::clearFocus()
Убирает фокус ввода с клавиатуры с элемента.
Если у него есть фокус, элементу отправляется событие потери фокуса, чтобы сообщить ему, что он собирается потерять фокус.
Только элементы, которые устанавливают флаг ItemIsFocusable, или виджеты, которые устанавливают соответствующую политику фокуса, могут принимать фокус ввода с клавиатуры.
См. также setFocus(), hasFocus() и QGraphicsWidget::focusPolicy.
QPainterPath QGraphicsItem::clipPath() const
Возвращает путь обрезки этого элемента или пустой QPainterPath, если этот элемент не обрезается. Путь обрезки ограничивает вид и взаимодействие элемента (т.е. ограничивает область, в которой элемент может рисовать и получать события).
Вы можете включить обрезку, установив флаги ItemClipsToShape или ItemClipsChildrenToShape. Путь обрезки элемента вычисляется путём пересечения всех путей обрезки предков. Если элемент устанавливает ItemClipsToShape, конечная обрезка пересекается с собственной формой элемента.
Примечание: Обрезка вносит штраф за производительность для всех задействованных элементов; следует избегать использования обрезки, если можно (например, если ваши элементы всегда рисуют внутри boundingRect() или shape() границ, обрезка не требуется).
См. также isClipped(), shape() и setFlags().
[virtual] bool QGraphicsItem::collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
Возвращает true, если этот элемент пересекается с other; в противном случае, возвращает false.
Режим mode применяется к other, а полученная форма или прямоугольник границ затем сравнивается с формой этого элемента. Значение по умолчанию для mode — Qt::IntersectsItemShape; other пересекается с этим элементом, если он либо пересекается, содержит или содержится в форме этого элемента (см. Qt::ItemSelectionMode для получения подробностей).
Реализация по умолчанию основана на пересечении фигур, и она вызывает shape() для обоих элементов. Поскольку сложность пересечения произвольных фигур растёт в порядке величины, когда фигуры сложные, эта операция может быть заметно затратной по времени. У вас есть возможность переопределить эту функцию в подклассе QGraphicsItem, чтобы предоставить пользовательский алгоритм. Это позволяет использовать естественные ограничения в формах собственных элементов, чтобы повысить производительность обнаружения коллизий. Например, коллизию двух не преобразованных идеально круговых элементов можно определить очень эффективно, сравнив их позиции и радиусы.
Помните, что при переопределении этой функции и вызове shape() или boundingRect() для другого элемента, возвращаемые координаты должны быть отображены в системе координат этого элемента перед выполнением любого пересечения.
См. также contains() и shape().
[virtual] bool QGraphicsItem::collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
Возвращает true, если этот элемент пересекается с path.
Коллизия определяется mode. Значение по умолчанию для mode — Qt::IntersectsItemShape; path пересекается с этим элементом, если он пересекает, содержит или содержится внутри формы этого элемента.
Обратите внимание, что эта функция проверяет, содержится ли форма или прямоугольник ограничивающей рамки элемента (в зависимости от mode) в path, а не содержится ли path в форме или прямоугольнике ограничивающей рамки элемента.
См. также collidesWithItem(), contains() и shape().
QList<QGraphicsItem *> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
Возвращает список всех элементов, которые пересекаются с этим элементом.
Способ обнаружения коллизий определяется применением mode к элементам, которые сравниваются с этим элементом, т.е. форма или прямоугольник ограничивающей рамки каждого элемента проверяется по отношению к форме этого элемента. Значение по умолчанию для mode — Qt::IntersectsItemShape.
См. также collidesWithItem().
QGraphicsItem *QGraphicsItem::commonAncestorItem(const QGraphicsItem *other) const
Возвращает ближайшего общего предка этого элемента и other, или nullptr, если other nullptr или общего предка нет.
См. также isAncestorOf().
[virtual] bool QGraphicsItem::contains(const QPointF &point) const
Возвращает true, если этот элемент содержит point, который находится в локальных координатах; в противном случае возвращается false. Чаще всего вызывается из QGraphicsView для определения элемента, находящегося под курсором, и поэтому реализация этой функции должна быть максимально лёгкой.
По умолчанию эта функция вызывает shape(), но вы можете переопределить её в подклассе, чтобы предоставить (возможно, более эффективную) реализацию.
См. также shape(), boundingRect() и collidesWithPath().
[virtual protected] void QGraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Этот обработчик событий может быть переопределён в подклассе для обработки событий контекстного меню. Параметр event содержит подробности обрабатываемого события.
Если вы игнорируете событие (т.е., вызвав QEvent::ignore()), event будет распространяться на любой элемент под этим элементом. Если ни один элемент не обрабатывает событие, оно будет проигнорировано сценой и будет распространено на представление.
Обычно для ответа на событие контекстного меню создаётся QMenu. Пример:
void CustomItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *markAction = menu.addAction("Mark");
QAction *selectedAction = menu.exec(event->screenPos());
// ...
} Реализация по умолчанию игнорирует событие.
См. также sceneEvent().
QCursor QGraphicsItem::cursor() const
Возвращает текущую форму курсора для элемента. Курсор мыши примет эту форму, когда он будет над этим элементом. См. список предопределённых объектов курсора для ряда полезных форм.
Элемент редактора может захотеть использовать курсор I-луча:
item->setCursor(Qt::IBeamCursor);
Если курсор не был задан, используется курсор элемента под ним.
См. также setCursor(), hasCursor(), unsetCursor(), QWidget::cursor и QGuiApplication::overrideCursor().
QVariant QGraphicsItem::data(int key) const
Возвращает пользовательские данные элемента для ключа key в виде QVariant.
Пользовательские данные элементов полезны для хранения произвольных свойств в любом элементе. Пример:
static const int ObjectName = 0;
QGraphicsItem *item = scene.itemAt(100, 50);
if (item->data(ObjectName).toString().isEmpty()) {
if (qgraphicsitem_cast<ButtonItem *>(item))
item->setData(ObjectName, "Button");
} Qt не использует эту функцию для хранения данных; она предоставляется только для удобства пользователя.
См. также setData().
QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) const
Возвращает матрицу преобразования устройства этого элемента, используя viewportTransform для преобразования из координат сцены в координаты устройства. Эта матрица может быть использована для преобразования координат и геометрических фигур из локальной системы координат этого элемента в систему координат представления (или любой системы устройства). Для преобразования координат из представления необходимо сначала инвертировать возвращённую матрицу.
Пример:
QGraphicsRectItem rect; rect.setPos(100, 100); rect.deviceTransform(view->viewportTransform()).map(QPointF(0, 0)); // returns the item's (0, 0) point in view's viewport coordinates rect.deviceTransform(view->viewportTransform()).inverted().map(QPointF(100, 100)); // returns view's viewport's (100, 100) coordinate in item coordinates
Эта функция аналогична комбинации преобразования сцены этого элемента с преобразованием представления представления, но она также понимает флаг ItemIgnoresTransformations. Преобразование устройства может быть использовано для точного преобразования координат (и обнаружения коллизий) для элементов, которые не допускают преобразований.
См. также transform(), setTransform(), scenePos(), Система координат графического представления и itemTransform().
[virtual protected] void QGraphicsItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий для события event может быть переопределён для получения событий drag enter для этого элемента. События drag enter генерируются при входе курсора в область элемента.
Принимая событие (т.е., вызвав QEvent::accept()), элемент будет принимать события drop, а также получать события drag move и drag leave. В противном случае событие будет проигнорировано и передано элементу под ним. Если событие принято, элемент получит событие drag move перед возвращением управления циклу событий.
Типичная реализация dragEnterEvent принимает или игнорирует event в зависимости от связанных данных MIME в event. Пример:
CustomItem::CustomItem()
{
setAcceptDrops(true);
...
}
void CustomItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
event->setAccepted(event->mimeData()->hasFormat("text/plain"));
} Элементы по умолчанию не получают событий перетаскивания и опускания; для включения этой функции вызовите setAcceptDrops(true).
Реализация по умолчанию ничего не делает.
См. также dropEvent(), dragMoveEvent() и dragLeaveEvent().
[virtual protected] void QGraphicsItem::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий для события event может быть переопределён для получения событий drag leave для этого элемента. События drag leave генерируются, когда курсор покидает область элемента. Чаще всего вам не нужно переопределять эту функцию, но она может быть полезна для сброса состояния в вашем элементе (например, подсветки).
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
Элементы по умолчанию не получают событий перетаскивания и опускания; для включения этой функции вызовите setAcceptDrops(true).
Реализация по умолчанию ничего не делает.
См. также dragEnterEvent(), dropEvent() и dragMoveEvent().
[virtual protected] void QGraphicsItem::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
Этот обработчик событий для события event может быть переопределён для получения событий drag move для этого элемента. События drag move генерируются, когда курсор перемещается внутри области элемента. Чаще всего вам не нужно переопределять эту функцию; она используется для указания того, что только части элемента могут принимать опускания.
Вызов QEvent::ignore() или QEvent::accept() для event переключает возможность или невозможность приема опускания элементом в позиции из события. По умолчанию event принимается, что указывает на то, что элемент допускает опускания в указанной позиции.
Элементы по умолчанию не получают событий перетаскивания и опускания; для включения этой функции вызовите setAcceptDrops(true).
Реализация по умолчанию ничего не делает.
См. также dropEvent(), dragEnterEvent() и dragLeaveEvent().
[virtual protected] void QGraphicsItem::dropEvent(QGraphicsSceneDragDropEvent *event)
Обработчик этого события, для события event, может быть переопределён для получения событий опускания для этого элемента. Элементы могут получать события опускания только в том случае, если последнее событие перемещения при перетаскивании было принято.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
Элементы по умолчанию не получают события перетаскивания и опускания; чтобы включить эту функцию, вызовите setAcceptDrops(true).
Реализация по умолчанию ничего не делает.
См. также dragEnterEvent(), dragMoveEvent() и dragLeaveEvent().
qreal QGraphicsItem::effectiveOpacity() const
Возвращает эффективную непрозрачность этого элемента, которая находится в диапазоне от 0.0 (прозрачный) до 1.0 (непрозрачный). Это значение является комбинацией локальной непрозрачности этого элемента и непрозрачности его родителя и предков. Эффективная непрозрачность определяет, как отображается элемент.
См. также opacity(), setOpacity(), paint(), ItemIgnoresParentOpacity и ItemDoesntPropagateOpacityToChildren.
void QGraphicsItem::ensureVisible(const QRectF &rect = QRectF(), int xmargin = 50, int ymargin = 50)
Если этот элемент является частью сцены, отображаемой с помощью QGraphicsView, эта вспомогательная функция попытается прокрутить представление, чтобы убедиться, что rect виден внутри области просмотра. Если rect — это пустой прямоугольник (по умолчанию), QGraphicsItem использует прямоугольник ограничивающей области элемента. xmargin и ymargin — это количество пикселей, которые представление должно использовать для отступов.
Если указанный прямоугольник недоступен, содержимое прокручивается до ближайшего допустимого положения.
Если этот элемент не отображается с помощью QGraphicsView, эта функция ничего не делает.
См. также QGraphicsView::ensureVisible().
void QGraphicsItem::ensureVisible(qreal x, qreal y, qreal w, qreal h, int xmargin = 50, int ymargin = 50)
Эта вспомогательная функция эквивалентна вызову ensureVisible(QRectF(x, y, w, h), xmargin, ymargin).
bool QGraphicsItem::filtersChildEvents() const
Возвращает true, если этот элемент фильтрует события дочерних элементов (то есть все события, предназначенные для любого из его дочерних элементов, вместо этого отправляются этому элементу); в противном случае возвращается false.
Значение по умолчанию — false; события дочерних элементов не фильтруются.
См. также setFiltersChildEvents().
QGraphicsItem::GraphicsItemFlags QGraphicsItem::flags() const
Возвращает флаги этого элемента. Флаги описывают, какие настраиваемые функции элемента включены и выключены. Например, если флаги включают ItemIsFocusable, элемент может принимать фокус.
По умолчанию флаги не включены.
См. также setFlags() и setFlag().
[virtual protected] void QGraphicsItem::focusInEvent(QFocusEvent *event)
Обработчик этого события, для события event, может быть переопределён для получения событий ввода фокуса для этого элемента. Реализация по умолчанию вызывает ensureVisible().
См. также focusOutEvent(), sceneEvent() и setFocus().
QGraphicsItem *QGraphicsItem::focusItem() const
Если этот элемент, дочерний элемент или потомок этого элемента в настоящее время имеет фокус ввода, эта функция вернёт указатель на этот элемент. Если ни один потомок не имеет фокуса ввода, возвращается nullptr.
См. также hasFocus(), setFocus() и QWidget::focusWidget().
[virtual protected] void QGraphicsItem::focusOutEvent(QFocusEvent *event)
Обработчик этого события, для события event, может быть переопределён для получения событий выхода из фокуса для этого элемента. Реализация по умолчанию ничего не делает.
См. также focusInEvent(), sceneEvent() и setFocus().
QGraphicsItem *QGraphicsItem::focusProxy() const
Возвращает прокси-элемент фокуса этого элемента или nullptr, если у этого элемента нет прокси-элемента фокуса.
См. также setFocusProxy(), setFocus() и hasFocus().
void QGraphicsItem::grabKeyboard()
Захватывает ввод с клавиатуры.
Элемент будет получать все ввод с клавиатуры в сцене до тех пор, пока не произойдёт одно из следующих событий:
- Элемент становится невидимым
- Элемент удалён из сцены
- Элемент удалён
- Элемент вызывает ungrabKeyboard()
- Другой элемент вызывает grabKeyboard(); элемент получит захват клавиатуры, когда другой элемент вызовет ungrabKeyboard().
Когда элемент получает захват клавиатуры, он получает событие QEvent::GrabKeyboard. Когда он теряет захват клавиатуры, он получает событие QEvent::UngrabKeyboard. Эти события можно использовать для определения того, когда ваш элемент получает или теряет захват клавиатуры другими способами, кроме получения фокуса ввода.
Практически никогда не требуется явно захватывать клавиатуру в Qt, так как Qt делает это разумно. В частности, Qt захватывает клавиатуру, когда ваш элемент получает фокус ввода, и отпускает её, когда ваш элемент теряет фокус ввода или когда элемент скрыт.
Обратите внимание, что только видимые элементы могут захватывать ввод с клавиатуры. Вызов grabKeyboard() для невидимого элемента не имеет эффекта.
События клавиатуры не затрагиваются.
См. также ungrabKeyboard(), grabMouse() и setFocus().
void QGraphicsItem::grabMouse()
Захватывает ввод с мыши.
Этот элемент будет получать все события мыши для сцены, пока не произойдёт одно из следующих событий:
- Элемент становится невидимым
- Элемент удалён из сцены
- Элемент удалён
- Элемент вызывает ungrabMouse()
- Другой элемент вызывает grabMouse(); элемент получит захват мыши, когда другой элемент вызовет ungrabMouse().
Когда элемент получает захват мыши, он получает событие QEvent::GrabMouse. Когда он теряет захват мыши, он получает событие QEvent::UngrabMouse. Эти события можно использовать для определения того, когда ваш элемент получает или теряет захват мыши другими способами, кроме получения событий щелчка мыши.
Практически никогда не требуется явно захватывать мышь в Qt, так как Qt делает это разумно. В частности, Qt захватывает мышь при нажатии кнопки мыши и сохраняет её захваченной до тех пор, пока вы не отпустите последнюю кнопку мыши. Также виджеты Qt::Popup неявным образом вызывают grabMouse() при отображении и ungrabMouse() при скрытии.
Обратите внимание, что только видимые элементы могут захватывать ввод с мыши. Вызов grabMouse() для невидимого элемента не имеет эффекта.
События клавиатуры не затрагиваются.
См. также QGraphicsScene::mouseGrabberItem(), ungrabMouse() и grabKeyboard().
QGraphicsEffect *QGraphicsItem::graphicsEffect() const
Возвращает указатель на эффект этого элемента, если он есть; в противном случае nullptr.
См. также setGraphicsEffect().
QGraphicsItemGroup *QGraphicsItem::group() const
Возвращает указатель на группу элементов этого элемента или nullptr, если этот элемент не является членом группы.
См. также setGroup(), QGraphicsItemGroup и QGraphicsScene::createItemGroup().
bool QGraphicsItem::hasCursor() const
Возвращает true, если для этого элемента установлен курсор; в противном случае возвращается false.
По умолчанию у элементов нет установленного курсора. cursor() вернёт стандартный курсор указателя.
См. также unsetCursor().
bool QGraphicsItem::hasFocus() const
Возвращает true, если этот элемент активен, и у него или его прокси-элемента фокуса есть фокус ввода с клавиатуры; в противном случае возвращает false.
См. также focusItem(), setFocus(), QGraphicsScene::setFocusItem() и isActive().
void QGraphicsItem::hide()
Скрывает элемент (элементы по умолчанию видимы).
Эта функция-удобство эквивалентна вызову setVisible(false).
См. также show() и setVisible().
[virtual protected] void QGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий входа в зону наведения для этого элемента. По умолчанию выполняется вызов update(); в противном случае ничего не происходит.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
См. также hoverMoveEvent(), hoverLeaveEvent(), sceneEvent() и setAcceptHoverEvents().
[virtual protected] void QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий выхода из зоны наведения для этого элемента. По умолчанию выполняется вызов update(); в противном случае ничего не происходит.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
См. также hoverEnterEvent(), hoverMoveEvent(), sceneEvent() и setAcceptHoverEvents().
[virtual protected] void QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий перемещения в зоне наведения для этого элемента. По умолчанию ничего не происходит.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
См. также hoverEnterEvent(), hoverLeaveEvent(), sceneEvent() и setAcceptHoverEvents().
[virtual protected] void QGraphicsItem::inputMethodEvent(QInputMethodEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий ввода для этого элемента. По умолчанию событие игнорируется.
См. также inputMethodQuery() и sceneEvent().
Qt::InputMethodHints QGraphicsItem::inputMethodHints() const
Возвращает текущие подсказки метода ввода для этого элемента.
Подсказки метода ввода актуальны только для элементов ввода. Подсказки используются методом ввода для указания, как он должен работать. Например, если установлен флаг Qt::ImhNumbersOnly, метод ввода может изменить свои визуальные компоненты, чтобы отразить, что можно вводить только числа.
Эффект может различаться в разных реализациях метода ввода.
См. также setInputMethodHints() и inputMethodQuery().
[virtual protected] QVariant QGraphicsItem::inputMethodQuery(Qt::InputMethodQuery query) const
Этот метод актуален только для элементов ввода. Он используется методом ввода для запроса набора свойств элемента, чтобы иметь возможность поддерживать сложные операции метода ввода, такие как поддержка окружающего текста и преобразования.
query указывает, какое свойство запрашивается.
См. также inputMethodEvent() и QInputMethodEvent.
void QGraphicsItem::installSceneEventFilter(QGraphicsItem *filterItem)
Устанавливает фильтр событий для этого элемента на filterItem, заставляя все события для этого элемента сначала проходить через функцию sceneEventFilter() filterItem.
Для фильтрации событий другого элемента установите этот элемент как фильтр событий для другого элемента. Пример:
QGraphicsScene scene; QGraphicsEllipseItem *ellipse = scene.addEllipse(QRectF(-10, -10, 20, 20)); QGraphicsLineItem *line = scene.addLine(QLineF(-10, -10, 20, 20)); line->installSceneEventFilter(ellipse); // line's events are filtered by ellipse's sceneEventFilter() function. ellipse->installSceneEventFilter(line); // ellipse's events are filtered by line's sceneEventFilter() function.
Элемент может фильтровать события только для других элементов в той же сцене. Также элемент не может фильтровать свои собственные события; вместо этого вы можете напрямую переопределить sceneEvent().
Для установки и использования фильтров событий сцены элементы должны принадлежать к сцене.
См. также removeSceneEventFilter(), sceneEventFilter() и sceneEvent().
bool QGraphicsItem::isActive() const
Возвращает true, если этот элемент активен; в противном случае возвращает false.
Элемент может быть активным только если сцена активна. Элемент активен, если он является или является потомком активной панели. Элементы в неактивных панелях не активны.
Элементы, которые не являются частью панели, следуют активации сцены, когда сцена не имеет активной панели.
Только активные элементы могут получить фокус ввода.
См. также QGraphicsScene::isActive(), QGraphicsScene::activePanel(), panel() и isPanel().
bool QGraphicsItem::isAncestorOf(const QGraphicsItem *child) const
Возвращает true, если этот элемент является предком child (т.е., если этот элемент является родителем child или одним из предков родителя child).
См. также parentItem().
bool QGraphicsItem::isBlockedByModalPanel(QGraphicsItem **blockingPanel = nullptr) const
Возвращает true, если этот элемент заблокирован модальной панелью, в противном случае — false. Если blockingPanel не равен нулю, blockingPanel будет установлен на модальную панель, которая блокирует этот элемент. Если этот элемент не заблокирован, blockingPanel не будет установлен этой функцией.
Эта функция всегда возвращает false для элементов, не находящихся в сцене.
См. также panelModality(), setPanelModality() и PanelModality.
bool QGraphicsItem::isClipped() const
Возвращает true, если этот элемент обрезан. Элемент обрезан, если он установил флаг ItemClipsToShape или если он или любой из его предков установил флаг ItemClipsChildrenToShape.
Обрезка влияет на внешний вид элемента (т.е. рисование), а также на доставку событий мыши и наведения.
См. также clipPath(), shape() и setFlags().
bool QGraphicsItem::isEnabled() const
Возвращает true, если элемент включён; в противном случае возвращается false.
См. также setEnabled().
bool QGraphicsItem::isObscured(const QRectF &rect = QRectF()) const
Это перегруженная функция.
Возвращает true, если rect полностью скрыта непрозрачной формой любого из элементов, пересекающих его сверху (т.е. с более высоким значением Z, чем у этого элемента).
См. также opaqueArea().
bool QGraphicsItem::isObscured(qreal x, qreal y, qreal w, qreal h) const
Это перегруженная функция.
Эта функция-удобство эквивалентна вызову isObscured(QRectF(x, y, w, h)).
[virtual] bool QGraphicsItem::isObscuredBy(const QGraphicsItem *item) const
Возвращает true, если прямоугольник ограничительной рамки этого элемента полностью скрыт непрозрачной формой элемента item.
Основная реализация отображает opaqueArea() item в системе координат этого элемента, а затем проверяет, содержится ли boundingRect() этого элемента полностью внутри отображённой формы.
Вы можете переопределить эту функцию, чтобы предоставить пользовательский алгоритм для определения, скрыт ли этот элемент элементом item.
См. также opaqueArea() и isObscured().
bool QGraphicsItem::isPanel() const
Возвращает true, если элемент является панелью; в противном случае возвращает false.
См. также QGraphicsItem::panel() и ItemIsPanel.
END_OF_DOCUMENT_MARKERbool QGraphicsItem::isSelected() const
Возвращает значение true, если данный элемент выбран; в противном случае возвращает false.
Элементы, находящиеся в группе, наследуют состояние выбора группы.
По умолчанию элементы не выбраны.
См. также setSelected() и QGraphicsScene::setSelectionArea().
bool QGraphicsItem::isUnderMouse() const
Возвращает значение true, если данный элемент находится под курсором мыши в одном из представлений; в противном случае возвращает false.
См. также QGraphicsScene::views() и QCursor::pos().
bool QGraphicsItem::isVisible() const
Возвращает true, если элемент видимый; в противном случае возвращает false.
Обратите внимание, что общая видимость элемента не связана с тем, визуализируется ли он в настоящее время QGraphicsView.
См. также setVisible().
bool QGraphicsItem::isVisibleTo(const QGraphicsItem *parent) const
Возвращает значение true, если элемент видимый для parent; в противном случае возвращает false. parent может быть nullptr, в этом случае функция вернёт, является ли элемент видимым для сцены.
Элемент может быть невидимым для своих предков, даже если isVisible() имеет значение true. Он также может быть видимым для своих предков, даже если isVisible() имеет значение false. Если какой-либо предок скрыт, сам элемент будет неявным образом скрыт, в этом случае функция вернёт false.
См. также isVisible() и setVisible().
bool QGraphicsItem::isWidget() const
Возвращает true, если данный элемент является виджетом (т.е. QGraphicsWidget); в противном случае возвращает false.
bool QGraphicsItem::isWindow() const
Возвращает true, если элемент является окном виджета QGraphicsWidget, в противном случае возвращает false.
См. также QGraphicsWidget::windowFlags().
[virtual protected] QVariant QGraphicsItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
Этот виртуальный метод вызывается QGraphicsItem, чтобы уведомить пользовательские элементы о том, что изменяется часть их состояния. Переопределив этот метод, вы можете отреагировать на изменение и в некоторых случаях (в зависимости от change) внести коррективы.
change — это параметр изменяемого элемента. value — новое значение; тип значения зависит от change.
Пример:
QVariant Component::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == ItemPositionChange && scene()) {
// value is the new position.
QPointF newPos = value.toPointF();
QRectF rect = scene()->sceneRect();
if (!rect.contains(newPos)) {
// Keep the item inside the scene rect.
newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));
newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));
return newPos;
}
}
return QGraphicsItem::itemChange(change, value);
} По умолчанию ничего не делается и возвращается value.
Примечание. Некоторые функции QGraphicsItem не могут быть вызваны в переопределении этого метода; см. документацию по GraphicsItemChange для получения подробностей.
См. также GraphicsItemChange.
QTransform QGraphicsItem::itemTransform(const QGraphicsItem *other, bool *ok = nullptr) const
Возвращает QTransform, который отображает координаты из данного элемента в other. Если ok не равен null и такого преобразования не существует, то логическое значение, на которое указывает ok, будет установлено в false; в противном случае оно будет установлено в true.
Это преобразование представляет собой альтернативу функциям mapToItem() или mapFromItem(), возвращая необходимое преобразование для отображения фигур и координат самостоятельно. Это также помогает вам писать более эффективный код при многократном отображении между одними и теми же двумя элементами.
Примечание: В редких случаях не существует преобразования, которое отображает два элемента.
См. также mapToItem(), mapFromItem() и deviceTransform().
[virtual protected] void QGraphicsItem::keyPressEvent(QKeyEvent *event)
Этот обработчик событий для события event может быть переопределён для получения событий нажатия клавиш для данного элемента. По умолчанию обработчик игнорирует событие. Если вы переопределяете этот обработчик, событие по умолчанию будет принято.
Обратите внимание, что события нажатия клавиш принимаются только для элементов, которые устанавливают флаг ItemIsFocusable, и которые имеют фокус клавиатуры.
См. также keyReleaseEvent(), setFocus(), QGraphicsScene::setFocusItem() и sceneEvent().
[virtual protected] void QGraphicsItem::keyReleaseEvent(QKeyEvent *event)
Этот обработчик событий для события event может быть переопределён для получения событий отпускания клавиш для данного элемента. По умолчанию обработчик игнорирует событие. Если вы переопределяете этот обработчик, событие по умолчанию будет принято.
Обратите внимание, что события нажатия клавиш принимаются только для элементов, которые устанавливают флаг ItemIsFocusable, и которые имеют фокус клавиатуры.
См. также keyPressEvent(), setFocus(), QGraphicsScene::setFocusItem() и sceneEvent().
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPointF &point) const
Преобразует точку point, которая находится в системе координат item, в систему координат данного элемента и возвращает преобразованную координату.
Если item равен nullptr, эта функция возвращает то же, что и mapFromScene().
См. также itemTransform(), mapFromParent(), mapFromScene(), transform(), mapToItem() и Систему координат графического представления.
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QRectF &rect) const
Преобразует прямоугольник rect, который находится в системе координат item, в систему координат данного элемента и возвращает преобразованный прямоугольник в виде многоугольника.
Если item равен nullptr, эта функция возвращает то же, что и mapFromScene().
См. также itemTransform(), mapToItem(), mapFromParent(), transform() и Систему координат графического представления.
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const
Преобразует многоугольник polygon, который находится в системе координат item, в систему координат данного элемента и возвращает преобразованный многоугольник.
Если item равен nullptr, эта функция возвращает то же, что и mapFromScene().
См. также itemTransform(), mapToItem(), mapFromParent(), transform() и Систему координат графического представления.
QPainterPath QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const
Преобразует путь path, который находится в системе координат item, в систему координат данного элемента и возвращает преобразованный путь.
Если item равен nullptr, эта функция возвращает то же, что и mapFromScene().
См. также itemTransform(), mapFromParent(), mapFromScene(), mapToItem() и Систему координат графического представления.
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal x, qreal y) const
Это перегруженный метод.
Эта вспомогательная функция эквивалентна вызову mapFromItem(item, QPointF(x, y)).
QPolygonF QGraphicsItem::mapFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
Эта функция-утилита эквивалентна вызову mapFromItem(item, QRectF(x, y, w, h)).
QPointF QGraphicsItem::mapFromParent(const QPointF &point) const
Преобразует точку point, которая находится в системе координат родительского элемента, в систему координат этого элемента и возвращает преобразованную координату.
См. также mapFromItem(), mapFromScene(), transform(), mapToParent() и Систему координат Виджета графического представления.
QPolygonF QGraphicsItem::mapFromParent(const QRectF &rect) const
Преобразует прямоугольник rect, который находится в системе координат родительского элемента, в систему координат этого элемента и возвращает преобразованный прямоугольник в виде многоугольника.
См. также mapToParent(), mapFromItem(), transform() и Систему координат Виджета графического представления.
QPolygonF QGraphicsItem::mapFromParent(const QPolygonF &polygon) const
Преобразует многоугольник polygon, который находится в системе координат родительского элемента, в систему координат этого элемента и возвращает преобразованный многоугольник.
См. также mapToParent(), mapToItem(), transform() и Систему координат Виджета графического представления.
QPainterPath QGraphicsItem::mapFromParent(const QPainterPath &path) const
Преобразует кривую path, которая находится в системе координат родительского элемента, в систему координат этого элемента и возвращает преобразованную кривую.
См. также mapFromScene(), mapFromItem(), mapToParent() и Систему координат Виджета графического представления.
QPointF QGraphicsItem::mapFromParent(qreal x, qreal y) const
Это перегруженный метод.
Эта функция-утилита эквивалентна вызову mapFromParent(QPointF(x, y)).
QPolygonF QGraphicsItem::mapFromParent(qreal x, qreal y, qreal w, qreal h) const
Эта функция-утилита эквивалентна вызову mapFromItem(QRectF(x, y, w, h)).
QPointF QGraphicsItem::mapFromScene(const QPointF &point) const
Преобразует точку point, которая находится в системе координат сцены, в систему координат этого элемента и возвращает преобразованную координату.
См. также mapFromItem(), mapFromParent(), transform(), mapToScene() и Систему координат Виджета графического представления.
QPolygonF QGraphicsItem::mapFromScene(const QRectF &rect) const
Преобразует прямоугольник rect, который находится в системе координат сцены, в систему координат этого элемента и возвращает преобразованный прямоугольник в виде многоугольника.
См. также mapToScene(), mapFromItem(), transform() и Систему координат Виджета графического представления.
QPolygonF QGraphicsItem::mapFromScene(const QPolygonF &polygon) const
Преобразует многоугольник polygon, который находится в системе координат сцены, в систему координат этого элемента и возвращает преобразованный многоугольник.
См. также mapToScene(), mapFromParent(), transform() и Систему координат Виджета графического представления.
QPainterPath QGraphicsItem::mapFromScene(const QPainterPath &path) const
Преобразует кривую path, которая находится в системе координат сцены, в систему координат этого элемента и возвращает преобразованную кривую.
См. также mapFromParent(), mapFromItem(), mapToScene() и Систему координат Виджета графического представления.
QPointF QGraphicsItem::mapFromScene(qreal x, qreal y) const
Это перегруженный метод.
Эта функция-утилита эквивалентна вызову mapFromScene(QPointF(x, y)).
QPolygonF QGraphicsItem::mapFromScene(qreal x, qreal y, qreal w, qreal h) const
Эта функция-утилита эквивалентна вызову mapFromScene(QRectF(x, y, w, h)).
QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const
Преобразует прямоугольник rect, который находится в системе координат item, в систему координат этого элемента и возвращает преобразованный прямоугольник в виде нового прямоугольника (т.е., прямоугольника, охватывающего результат).
Если item является nullptr, эта функция возвращает то же самое, что и mapRectFromScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Виджета графического представления.
QRectF QGraphicsItem::mapRectFromItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
Эта функция-утилита эквивалентна вызову mapRectFromItem(item, QRectF(x, y, w, h)).
QRectF QGraphicsItem::mapRectFromParent(const QRectF &rect) const
Преобразует прямоугольник rect, который находится в системе координат родительского элемента, в систему координат этого элемента и возвращает преобразованный прямоугольник в виде нового прямоугольника (т.е., прямоугольника, охватывающего результат).
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Виджета графического представления.
QRectF QGraphicsItem::mapRectFromParent(qreal x, qreal y, qreal w, qreal h) const
Эта функция-утилита эквивалентна вызову mapRectFromParent(QRectF(x, y, w, h)).
QRectF QGraphicsItem::mapRectFromScene(const QRectF &rect) const
Преобразует прямоугольник rect, заданный в координатах сцены, в систему координат данного элемента и возвращает преобразованный прямоугольник как новый прямоугольник (т. е. ограничивающий прямоугольник результирующего многоугольника).
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QRectF QGraphicsItem::mapRectFromScene(qreal x, qreal y, qreal w, qreal h) const
Эта вспомогательная функция эквивалентна вызову mapRectFromScene(QRectF(x, y, w, h)).
QRectF QGraphicsItem::mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат данного элемента, в систему координат элемента item и возвращает преобразованный прямоугольник как новый прямоугольник (т. е. ограничивающий прямоугольник результирующего многоугольника).
Если item является nullptr, эта функция возвращает то же, что и mapRectToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QRectF QGraphicsItem::mapRectToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
Эта вспомогательная функция эквивалентна вызову mapRectToItem(item, QRectF(x, y, w, h)).
QRectF QGraphicsItem::mapRectToParent(const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат данного элемента, в систему координат его родительского элемента и возвращает преобразованный прямоугольник как новый прямоугольник (т. е. ограничивающий прямоугольник результирующего многоугольника).
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QRectF QGraphicsItem::mapRectToParent(qreal x, qreal y, qreal w, qreal h) const
Эта вспомогательная функция эквивалентна вызову mapRectToParent(QRectF(x, y, w, h)).
QRectF QGraphicsItem::mapRectToScene(const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат данного элемента, в систему координат сцены и возвращает преобразованный прямоугольник как новый прямоугольник (т. е. ограничивающий прямоугольник результирующего многоугольника).
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QRectF QGraphicsItem::mapRectToScene(qreal x, qreal y, qreal w, qreal h) const
Эта вспомогательная функция эквивалентна вызову mapRectToScene(QRectF(x, y, w, h)).
QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPointF &point) const
Преобразует точку point, заданную в системе координат данного элемента, в систему координат элемента item и возвращает преобразованную координату.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), transform(), mapFromItem() и Систему координат Graphics View.
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат данного элемента, в систему координат элемента item и возвращает преобразованный прямоугольник как многоугольник.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const
Преобразует многоугольник polygon, заданный в системе координат данного элемента, в систему координат элемента item и возвращает преобразованный многоугольник.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QPainterPath QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPainterPath &path) const
Преобразует путь path, заданный в системе координат данного элемента, в систему координат элемента item и возвращает преобразованный путь.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Систему координат Graphics View.
QPointF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal x, qreal y) const
Это перегруженная функция.
Эта вспомогательная функция эквивалентна вызову mapToItem(item, QPointF(x, y)).
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, qreal x, qreal y, qreal w, qreal h) const
Эта вспомогательная функция эквивалентна вызову mapToItem(item, QRectF(x, y, w, h)).
QPointF QGraphicsItem::mapToParent(const QPointF &point) const
Преобразует точку point, заданную в системе координат данного элемента, в систему координат его родительского элемента и возвращает преобразованную координату. Если у элемента нет родителя, point преобразуется в систему координат сцены.
См. также mapToItem(), mapToScene(), transform(), mapFromParent(), и Систему координат Graphics View.
QPolygonF QGraphicsItem::mapToParent(const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат этого элемента, в систему координат родительского элемента и возвращает преобразованный прямоугольник в виде многоугольника. Если у элемента нет родителя, rect будет преобразован в систему координат сцены.
См. также mapToScene(), mapToItem(), mapFromParent(), и Систему координат Graphics View.
QPolygonF QGraphicsItem::mapToParent(const QPolygonF &polygon) const
Преобразует многоугольник polygon, заданный в системе координат этого элемента, в систему координат родительского элемента и возвращает преобразованный многоугольник. Если у элемента нет родителя, polygon будет преобразован в систему координат сцены.
См. также mapToScene(), mapToItem(), mapFromParent(), и Систему координат Graphics View.
QPainterPath QGraphicsItem::mapToParent(const QPainterPath &path) const
Преобразует кривую path, заданную в системе координат этого элемента, в систему координат родительского элемента и возвращает преобразованную кривую. Если у элемента нет родителя, path будет преобразован в систему координат сцены.
См. также mapToScene(), mapToItem(), mapFromParent(), и Систему координат Graphics View.
QPointF QGraphicsItem::mapToParent(qreal x, qreal y) const
Это перегруженный метод.
Эта функция-помощник эквивалентна вызову mapToParent(QPointF(x, y)).
QPolygonF QGraphicsItem::mapToParent(qreal x, qreal y, qreal w, qreal h) const
Эта функция-помощник эквивалентна вызову mapToParent(QRectF(x, y, w, h)).
QPointF QGraphicsItem::mapToScene(const QPointF &point) const
Преобразует точку point, заданную в системе координат этого элемента, в систему координат сцены и возвращает преобразованную координату.
См. также mapToItem(), mapToParent(), transform(), mapFromScene(), и Систему координат Graphics View.
QPolygonF QGraphicsItem::mapToScene(const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат этого элемента, в систему координат сцены и возвращает преобразованный прямоугольник в виде многоугольника.
См. также mapToParent(), mapToItem(), mapFromScene(), и Систему координат Graphics View.
QPolygonF QGraphicsItem::mapToScene(const QPolygonF &polygon) const
Преобразует многоугольник polygon, заданный в системе координат этого элемента, в систему координат сцены и возвращает преобразованный многоугольник.
См. также mapToParent(), mapToItem(), mapFromScene(), и Систему координат Graphics View.
QPainterPath QGraphicsItem::mapToScene(const QPainterPath &path) const
Преобразует кривую path, заданную в системе координат этого элемента, в систему координат сцены и возвращает преобразованную кривую.
См. также mapToParent(), mapToItem(), mapFromScene(), и Систему координат Graphics View.
QPointF QGraphicsItem::mapToScene(qreal x, qreal y) const
Это перегруженный метод.
Эта функция-помощник эквивалентна вызову mapToScene(QPointF(x, y)).
QPolygonF QGraphicsItem::mapToScene(qreal x, qreal y, qreal w, qreal h) const
Эта функция-помощник эквивалентна вызову mapToScene(QRectF(x, y, w, h)).
void QGraphicsItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий двойного щелчка мышью для этого элемента.
При двойном щелчке по элементу, элемент сначала получит событие нажатия мыши, затем событие отпускания (т.е. щелчок), затем событие двойного щелчка, и, наконец, событие отпускания.
Вызов QEvent::ignore() или QEvent::accept() на event не имеет эффекта.
Базовая реализация вызывает mousePressEvent(). Если при переопределении этого метода вы хотите сохранить базовую реализацию, вызовите QGraphicsItem::mouseDoubleClickEvent() в своём переопределении.
Обратите внимание, что элемент не получит события двойного щелчка, если он не выделим и не перемещаем (события одиночного щелчка в этом случае игнорируются, и это предотвращает генерацию двойных щелчков).
См. также mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), и sceneEvent().
void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий перемещения мыши для этого элемента. Если вы получаете это событие, вы можете быть уверены, что этот элемент также получил событие нажатия мыши и что этот элемент является текущим захватчиком мыши.
Вызов QEvent::ignore() или QEvent::accept() на event не имеет эффекта.
Базовая реализация обрабатывает основные взаимодействия с элементом, такие как выделение и перемещение. Если при переопределении этого метода вы хотите сохранить базовую реализацию, вызовите QGraphicsItem::mouseMoveEvent() в своём переопределении.
Обратите внимание, что mousePressEvent() определяет, какой графический элемент получит события мыши. Для получения подробностей см. описание mousePressEvent().
См. также mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), и sceneEvent().
void QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий нажатия мыши для этого элемента. События нажатия мыши доставляются только тем элементам, которые принимают нажатую кнопку мыши. По умолчанию элемент принимает все кнопки мыши, но вы можете изменить это, вызвав setAcceptedMouseButtons().
Событие нажатия мыши определяет, какой элемент должен стать захватчиком мыши (см. QGraphicsScene::mouseGrabberItem()). Если вы не переопределяете этот метод, событие нажатия будет передано любому верхнему элементу под этим элементом, и никакие другие события мыши не будут доставлены этому элементу.
Если вы переопределите эту функцию, event по умолчанию будет принят (см. QEvent::accept()), и этот элемент станет захватчиком мыши. Это позволяет элементу получать будущие события перемещения, отпускания и двойного щелчка. Если вы вызовете QEvent::ignore() для event, этот элемент потеряет захват мыши, а event будет передан любому верхнему элементу ниже. Дальнейшие события мыши не будут доставлены этому элементу, пока не будет получено новое событие нажатия мыши.
Реализация по умолчанию обрабатывает базовое взаимодействие с элементом, такое как выделение и перемещение. Если вы хотите сохранить базовую реализацию при переопределении этой функции, вызовите QGraphicsItem::mousePressEvent() в своём переопределении.
Событие QEvent::ignore() обрабатывается для элементов, которые не являются ни перемещаемыми, ни выделяемыми.
См. также mouseMoveEvent(), mouseReleaseEvent(), mouseDoubleClickEvent() и sceneEvent().
[virtual protected] void QGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий отпускания мыши для этого элемента.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
Реализация по умолчанию обрабатывает базовое взаимодействие с элементом, такое как выделение и перемещение. Если вы хотите сохранить базовую реализацию при переопределении этой функции, вызовите QGraphicsItem::mouseReleaseEvent() в своём переопределении.
Обратите внимание, что mousePressEvent() определяет, какой графический элемент получает события мыши. Подробности см. в описании mousePressEvent().
См. также mousePressEvent(), mouseMoveEvent(), mouseDoubleClickEvent() и sceneEvent().
void QGraphicsItem::moveBy(qreal dx, qreal dy)
Перемещает элемент на dx единиц по горизонтали и dy единиц по вертикали. Эта функция эквивалентна вызову setPos(pos() + QPointF(dx, dy)).
qreal QGraphicsItem::opacity() const
Возвращает локальную непрозрачность этого элемента, которая находится в диапазоне от 0,0 (прозрачный) до 1,0 (непрозрачный). Это значение комбинируется со значениями родительских и предковых элементов в effectiveOpacity(). Эффективная непрозрачность определяет, как элемент будет отображаться, а также влияет на его видимость при запросе функциями, такими как QGraphicsView::items().
Свойство opacity определяет состояние кисти, передаваемой функции paint(). Если элемент кэшируется, т.е. ItemCoordinateCache или DeviceCoordinateCache, эффективное свойство будет применено к кэшу элемента при его отрисовке.
По умолчанию непрозрачность равна 1,0; полностью непрозрачный.
См. также setOpacity(), paint(), ItemIgnoresParentOpacity и ItemDoesntPropagateOpacityToChildren.
[virtual] QPainterPath QGraphicsItem::opaqueArea() const
Эта виртуальная функция возвращает форму, представляющую область, где этот элемент является непрозрачным. Область непрозрачна, если она заполнена непрозрачной кистью или цветом (т.е. не прозрачная).
Эта функция используется функцией isObscuredBy(), которая вызывается элементами для определения того, скрыт ли этот элемент.
Реализация по умолчанию возвращает пустой QPainterPath, что означает, что этот элемент полностью прозрачный и не скрывает другие элементы.
См. также isObscuredBy(), isObscured() и shape().
[pure virtual] void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)
Эта функция, обычно вызываемая QGraphicsView, рисует содержимое элемента в локальных координатах.
Переопределите эту функцию в подклассе QGraphicsItem, чтобы предоставить реализацию отрисовки элемента, используя painter. Параметр option предоставляет параметры стиля для элемента, такие как его состояние, отображаемая область и подсказки уровня детализации. Аргумент widget необязательный. Если он указан, он указывает на виджет, на котором происходит отрисовка; в противном случае он равен 0. Для кэшированной отрисовки widget всегда равен 0.
void RoundRectItem::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
} Перо кисти по умолчанию имеет ширину 0, а его цвет установлен в кисть QPalette::Text из палитры устройства отрисовки. Кисть установлена в QPalette::Window.
Убедитесь, что вся отрисовка ограничена границами boundingRect(), чтобы избежать артефактов (так как QGraphicsView не обрезает кисть для вас). В частности, когда QPainter рисует контур фигуры с помощью заданного QPen, половина контура будет нарисована снаружи, а половина внутри фигуры, которую вы рисуете (например, при ширине пера 2 единицы, необходимо рисовать контуры на 1 единицу внутри boundingRect()). QGraphicsItem не поддерживает использование косметических перьев с ненулевой шириной.
Вся отрисовка выполняется в локальных координатах.
Примечание: Элемент должен всегда перерисовывать себя точно так же, если не был вызван update(); в противном случае могут возникнуть визуальные артефакты. Другими словами, два последующих вызова paint() должны всегда генерировать одинаковый результат, если между ними не был вызван update().
Примечание: Включение кэширования для элемента не гарантирует, что paint() будет вызван только один раз фреймворком Graphics View, даже без явного вызова update(). Дополнительные сведения см. в документации к setCacheMode().
См. также setCacheMode(), QPen::width(), Координаты элемента и ItemUsesExtendedStyleOption.
QGraphicsItem *QGraphicsItem::panel() const
Возвращает панель элемента или nullptr, если у этого элемента нет панели. Если элемент является панелью, он вернёт себя. В противном случае он вернёт ближайшего предка, являющегося панелью.
См. также isPanel() и ItemIsPanel.
QGraphicsItem::PanelModality QGraphicsItem::panelModality() const
Возвращает режим работы для данного элемента.
См. также setPanelModality().
QGraphicsItem *QGraphicsItem::parentItem() const
Возвращает указатель на родительский элемент этого элемента. Если у этого элемента нет родителя, возвращается nullptr.
См. также setParentItem() и childItems().
QGraphicsObject *QGraphicsItem::parentObject() const
Возвращает указатель на родителя элемента, преобразованного в QGraphicsObject. Возвращает nullptr, если родительский элемент не является QGraphicsObject.
См. также parentItem() и childItems().
QGraphicsWidget *QGraphicsItem::parentWidget() const
Возвращает указатель на родительский виджет элемента. Родительский виджет элемента — это ближайший родительский элемент, являющийся виджетом.
См. также parentItem() и childItems().
QPointF QGraphicsItem::pos() const
Возвращает положение элемента в координатах родителя. Если элемент не имеет родителя, его положение задаётся в координатах сцены.
Положение элемента описывает его начало (локальные координаты (0, 0)) в координатах родителя; эта функция возвращает то же, что и mapToParent(0, 0).
Для удобства вы также можете вызвать scenePos() для определения положения элемента в координатах сцены, независимо от его родителя.
См. также x(), y(), setPos(), transform() и Система координат Graphics View.
[protected] void QGraphicsItem::prepareGeometryChange()
Подготавливает элемент к изменению геометрии. Вызовите эту функцию перед изменением области ограничивающего прямоугольника элемента, чтобы сохранить индекс QGraphicsScene актуальным.
prepareGeometryChange() вызовет update() при необходимости.
Пример:
void CircleItem::setRadius(qreal newRadius)
{
if (radius != newRadius) {
prepareGeometryChange();
radius = newRadius;
}
} См. также boundingRect().
void QGraphicsItem::removeSceneEventFilter(QGraphicsItem *filterItem)
Удаляет обработчик событий сцены для этого элемента от filterItem.
См. также installSceneEventFilter().
void QGraphicsItem::resetTransform()
Сбрасывает матрицу преобразования этого элемента до единичной матрицы или все свойства преобразования до значений по умолчанию. Это эквивалентно вызову setTransform(QTransform()).
См. также setTransform() и transform().
qreal QGraphicsItem::rotation() const
Возвращает угол поворота по часовой стрелке, в градусах, вокруг оси Z. Значение по умолчанию равно 0 (т.е., элемент не повернут).
Поворот комбинируется со масштабом (scale()), преобразованием (transform()) и преобразованиями (transformations()) элемента для отображения системы координат элемента в родительский элемент.
См. также setRotation(), transformOriginPoint() и Transformations.
qreal QGraphicsItem::scale() const
Возвращает коэффициент масштабирования элемента. Значение коэффициента масштабирования по умолчанию равно 1.0 (т.е., элемент не масштабируется).
Масштаб комбинируется с поворотом (rotation()), преобразованием (transform()) и преобразованиями (transformations()) элемента для отображения системы координат элемента в родительский элемент.
См. также setScale(), rotation() и Transformations.
QGraphicsScene *QGraphicsItem::scene() const
Возвращает текущую сцену для элемента или nullptr, если элемент не хранится в сцене.
Для добавления или перемещения элемента в сцену, вызовите QGraphicsScene::addItem().
QRectF QGraphicsItem::sceneBoundingRect() const
Возвращает прямоугольник, ограничивающий этот элемент в координатах сцены, объединяя sceneTransform() с boundingRect().
См. также boundingRect() и Систему координат виджета графического представления.
[virtual protected] bool QGraphicsItem::sceneEvent(QEvent *event)
Этот виртуальный метод получает события для этого элемента. Переопределите этот метод, чтобы перехватить события перед их отправкой специализированным обработчикам событий contextMenuEvent(), focusInEvent(), focusOutEvent(), hoverEnterEvent(), hoverMoveEvent(), hoverLeaveEvent(), keyPressEvent(), keyReleaseEvent(), mousePressEvent(), mouseReleaseEvent(), mouseMoveEvent() и mouseDoubleClickEvent().
Возвращает true, если событие было распознано и обработано; в противном случае (например, если тип события не был распознан) возвращается false.
event — перехваченное событие.
[virtual protected] bool QGraphicsItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
Фильтрует события для элемента watched. event — отфильтрованное событие.
Переопределение этого метода в подклассе позволяет использовать элемент в качестве фильтра событий для других элементов, перехватывая все события, отправляемые этим элементам, перед тем, как они смогут на них ответить.
Переопределения должны возвращать true, чтобы предотвратить дальнейшую обработку данного события, гарантируя, что оно не будет передано элементу watched, или возвращать false, чтобы указать, что событие должно быть распространено дальше системой событий.
См. также installSceneEventFilter().
QPointF QGraphicsItem::scenePos() const
Возвращает позицию элемента в координатах сцены. Это эквивалентно вызову mapToScene(0, 0).
См. также pos(), sceneTransform() и Систему координат виджета графического представления.
QTransform QGraphicsItem::sceneTransform() const
Возвращает матрицу преобразования сцены этого элемента. Эта матрица может быть использована для отображения координат и геометрических фигур из локальной системы координат этого элемента в систему координат сцены. Для отображения координат из сцены необходимо сначала инвертировать возвращаемую матрицу.
Пример:
QGraphicsRectItem rect; rect.setPos(100, 100); rect.sceneTransform().map(QPointF(0, 0)); // returns QPointF(100, 100); rect.sceneTransform().inverted().map(QPointF(100, 100)); // returns QPointF(0, 0);
В отличие от transform(), которая возвращает только локальное преобразование элемента, эта функция включает позицию элемента (и любых родительских элементов) и все свойства преобразования.
См. также transform(), setTransform(), scenePos(), Систему координат виджета графического представления и Transformations.
void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect = QRectF())
Прокручивает содержимое rect на dx, dy. Если rect является пустым прямоугольником (значение по умолчанию), прокручивается прямоугольник, ограничивающий элемент.
Прокрутка предоставляет быстрый альтернативный способ перерисовки, когда содержимое элемента (или части элемента) смещается по вертикали или горизонтали. В зависимости от текущего преобразования и возможностей устройства отрисовки (т. е., области просмотра) эта операция может состоять из простого перемещения пикселей из одного места в другое с помощью memmove(). В большинстве случаев это быстрее, чем перерисовка всей области.
После прокрутки элемент вызовет обновление для вновь открывшихся областей. Если прокрутка не поддерживается (например, вы рисуете в области просмотра OpenGL, которая не получает преимуществ от оптимизаций прокрутки), эта функция эквивалентна вызову update(rect).
Примечание: Прокрутка поддерживается только при включенном QGraphicsItem::ItemCoordinateCache; во всех других случаях вызов этой функции эквивалентен вызову update(rect). Если вы уверены, что элемент непрозрачен и не перекрывается другими элементами, вы можете отобразить rect в координатах области просмотра и прокрутить область просмотра.
QTransform xform = item->deviceTransform(view->viewportTransform()); QRect deviceRect = xform.mapRect(rect).toAlignedRect(); view->viewport()->scroll(dx, dy, deviceRect);
См. также boundingRect().
void QGraphicsItem::setAcceptDrops(bool on)
Если on равно true, этот элемент будет принимать события перетаскивания и опускания; в противном случае он прозрачен для событий перетаскивания и опускания. По умолчанию элементы не принимают события перетаскивания и опускания.
См. также acceptDrops().
void QGraphicsItem::setAcceptHoverEvents(bool enabled)
Если enabled равно true, этот элемент будет принимать события наведения; в противном случае он будет их игнорировать. По умолчанию элементы не принимают события наведения.
События наведения посылаются, когда нет текущего элемента захвата мыши. Они отправляются, когда курсор мыши входит в элемент, когда он перемещается внутри элемента и когда курсор покидает элемент. События наведения обычно используются для выделения элемента при входе в него и для отслеживания курсора мыши при наведении на элемент (эквивалент QWidget::mouseTracking).
Родительские элементы получают события входа наведения перед своими дочерними элементами и события выхода наведения после своих дочерних элементов. Однако родительский элемент не получает события выхода наведения, если курсор входит в дочерний элемент; родительский элемент остаётся "наведённым", пока курсор не покинет его область, включая области его дочерних элементов.
Если родительский элемент обрабатывает события дочерних элементов, он будет получать события перемещения наведения, перемещения перетаскивания и опускания, когда курсор проходит через своих дочерних элементов, но не получает события входа наведения, выхода наведения, а также входа перетаскивания и выхода перетаскивания от имени своих дочерних элементов.
Элемент QGraphicsWidget с элементами оформления окна будет принимать события наведения независимо от значения acceptHoverEvents().
См. также acceptHoverEvents(), hoverEnterEvent(), hoverMoveEvent() и hoverLeaveEvent().
void QGraphicsItem::setAcceptTouchEvents(bool enabled)
Если enabled равно true, этот элемент будет принимать события касания; в противном случае он их будет игнорировать. По умолчанию элементы не принимают события касания.
См. также acceptTouchEvents().
void QGraphicsItem::setAcceptedMouseButtons(Qt::MouseButtons buttons)
Устанавливает кнопки мыши buttons, для которых этот элемент принимает события мыши.
По умолчанию все кнопки мыши принимаются. Если элемент принимает нажатие кнопки мыши, он станет элементом захвата мыши при поступлении события нажатия для этой кнопки. Однако, если элемент не принимает кнопку мыши, QGraphicsScene передаст события мыши первому элементу под ним, который это сделает.
Чтобы отключить события мыши для элемента (то есть сделать его прозрачным для событий мыши), вызовите setAcceptedMouseButtons(0).
См. также acceptedMouseButtons() и mousePressEvent().
void QGraphicsItem::setActive(bool active)
Если active имеет значение true, и сцена активна, панель этого элемента будет активирована. В противном случае панель деактивируется.
Если элемент не является частью активной сцены, active определит, что произойдёт с панелью, когда сцена станет активной или элемент будет добавлен в сцену. Если значение true, панель элемента будет активирована, когда элемент будет добавлен в сцену или сцена будет активирована. В противном случае элемент останется неактивным независимо от состояния активации сцены.
См. также isPanel(), QGraphicsScene::setActivePanel и QGraphicsScene::isActive.
void QGraphicsItem::setBoundingRegionGranularity(qreal granularity)
Устанавливает гранулярность области ограничивающей области до granularity; значение между 0 и 1 включительно. Значение по умолчанию равно 0 (то есть наименьшая гранулярность, где область ограничивающей области соответствует прямоугольнику ограничивающей области элемента).
Гранулярность используется методом boundingRegion() для расчёта того, насколько мелкой должна быть ограничивающая область элемента. Наибольшая достижимая гранулярность — 1, где boundingRegion() вернёт наилучший контур, возможный для данного устройства (например, для области просмотра QGraphicsView это даст область, точное соответствие пикселям). Наименьшая возможная гранулярность — 0. Значение granularity описывает отношение между разрешением устройства и разрешением ограничивающей области (например, значение 0,25 обеспечит область, где каждый фрагмент соответствует 4x4 единицам/пикселям устройства).
См. также boundingRegionGranularity().
void QGraphicsItem::setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize())
Устанавливает режим кэширования элемента в mode.
Дополнительный аргумент logicalCacheSize используется только для режима ItemCoordinateCache и описывает разрешение буфера кэша; если logicalCacheSize — (100, 100), QGraphicsItem поместит элемент в 100x100 пикселей в графической памяти, независимо от логического размера самого элемента. По умолчанию QGraphicsItem использует размер boundingRect(). Для всех режимов кэширования, кроме ItemCoordinateCache, logicalCacheSize игнорируется.
Кэширование может ускорить отрисовку, если ваш элемент тратит значительное время на перерисовку. В некоторых случаях кэш также может замедлить отрисовку, особенно если элемент тратит меньше времени на перерисовку, чем QGraphicsItem на перерисовку из кэша.
При включенном кэшировании функция paint() элемента обычно рисует в кэш оффскрин-пикча; при последующих запросах перерисовки фреймворк Graphics View перерисует из кэша. Этот подход особенно хорошо работает с QGLWidget, который хранит весь кэш в виде текстур OpenGL.
Обратите внимание, что может потребоваться изменить предел кэша QPixmapCache для достижения оптимальной производительности.
Вы можете прочитать подробнее о различных режимах кэширования в документации CacheMode.
Примечание: Включение кэширования не подразумевает, что функция paint() элемента будет вызываться только в ответ на явное обращение update(). Например, при дефиците памяти Qt может решить сбросить часть информации кэша; в таких случаях функция paint() элемента будет вызвана даже если не было обращения update() (то есть так, как если бы кэширование не было включено).
См. также cacheMode(), CacheMode и QPixmapCache::setCacheLimit.
void QGraphicsItem::setCursor(const QCursor &cursor)
Устанавливает текущую форму курсора для элемента в cursor. Курсор мыши примет эту форму, когда он будет над этим элементом. Список предопределённых объектов курсора приведен в списке для различных полезных форм.
Элемент редактора может захотеть использовать курсор в виде I-луча:
item->setCursor(Qt::IBeamCursor);
Если курсор не установлен, используется курсор элемента под ним.
См. также cursor(), hasCursor(), unsetCursor(), QWidget::cursor и QGuiApplication::overrideCursor.
void QGraphicsItem::setData(int key, const QVariant &value)
Устанавливает пользовательские данные этого элемента для ключа key в value.
Пользовательские данные элемента полезны для хранения произвольных свойств любого элемента. Qt не использует эту функцию для хранения данных; она предоставляется исключительно для удобства пользователя.
См. также data().
void QGraphicsItem::setEnabled(bool enabled)
Если enabled имеет значение true, элемент включён; в противном случае — выключен.
Выключенные элементы видимы, но они не получают никаких событий, не могут получить фокус и не могут быть выбраны. События мыши игнорируются; они не распространяются, если элемент также невидим или если он не принимает события мыши (см. acceptedMouseButtons()). Выключенный элемент не может стать захватом мыши, и в результате этого элемент теряет захват, если он стал выключенным во время захвата мыши, так же как он теряет фокус, если у него был фокус, когда он был выключен.
Выключенные элементы традиционно рисуются с серыми цветами (см. QPalette::Disabled).
Если вы выключаете родительский элемент, все его дочерние элементы также будут выключены. Если вы включаете родительский элемент, все дочерние элементы будут включены, если они не были явно выключены (то есть если вы вызываете setEnabled(false) для дочернего элемента, он не будет включён снова, если его родитель был выключен, а затем включён).
Элементы включены по умолчанию.
Примечание: Если вы установите фильтр событий, вы по-прежнему сможете перехватывать события до их передачи элементам; этот механизм игнорирует состояние включения элемента.
См. также isEnabled().
void QGraphicsItem::setFiltersChildEvents(bool enabled)
Если enabled имеет значение true, этот элемент настроен на фильтрацию всех событий для всех его дочерних элементов (то есть все события, предназначенные для любого из его дочерних элементов, вместо этого отправляются этому элементу); в противном случае, если enabled имеет значение false, этот элемент будет обрабатывать только свои собственные события. Значение по умолчанию — false.
См. также filtersChildEvents().
void QGraphicsItem::setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true)
Если enabled имеет значение true, флаг элемента flag включен; в противном случае — выключен.
См. также flags() и setFlags().
void QGraphicsItem::setFlags(QGraphicsItem::GraphicsItemFlags flags)
Устанавливает флаги элемента в flags. Все флаги в flags включены; все флаги, отсутствующие в flags, выключены.
Если у элемента был фокус и flags не включает ItemIsFocusable, элемент теряет фокус в результате вызова этой функции. Аналогично, если элемент был выбран, и flags не включает ItemIsSelectable, элемент автоматически снимается с выбора.
По умолчанию ни один флаг не включён. (QGraphicsWidget включает флаг ItemSendsGeometryChanges по умолчанию, чтобы отслеживать изменения позиции.)
См. также flags() и setFlag().
void QGraphicsItem::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
Передаёт фокус ввода клавиатуры этому элементу. Аргумент focusReason будет передан в любое событие фокуса, сгенерированное этой функцией; он используется для объяснения причины получения элементом фокуса.
Только включённые элементы, установившие флаг ItemIsFocusable, могут принимать фокус клавиатуры.
Если этот элемент невидим, неактивен или не связан со сценой, он не получит немедленного фокуса ввода. Однако он будет зарегистрирован как предпочтительный элемент фокуса для своего поддерева элементов, если он станет видимым.
В результате вызова этой функции этот элемент получит событие фокусировки с focusReason. Если другой элемент уже имеет фокус, этот элемент сначала получит событие потери фокуса, указывающее, что он потерял фокус ввода.
См. также clearFocus(), hasFocus(), focusItem() и focusProxy().
void QGraphicsItem::setFocusProxy(QGraphicsItem *item)
Устанавливает прокси фокуса элемента на item.
Если у элемента есть прокси фокуса, прокси фокуса получит фокус ввода, когда элемент получает фокус ввода. Сам элемент по-прежнему будет иметь фокус (т.е., hasFocus() вернёт true), но только прокси фокуса получит ввод с клавиатуры.
Прокси фокуса может сам иметь прокси фокуса, и так далее. В таком случае ввод с клавиатуры будет обрабатываться самым внешним прокси фокуса.
Элемент прокси фокуса item должен принадлежать той же сцене, что и этот элемент.
См. также focusProxy(), setFocus() и hasFocus().
void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect)
Устанавливает effect в качестве эффекта элемента. Если на этом элементе уже установлен эффект, QGraphicsItem удалит существующий эффект перед установкой нового effect. Вы можете удалить существующий эффект, вызвав setGraphicsEffect(nullptr).
Если effect установлен на другом элементе, setGraphicsEffect() удалит эффект с элемента и установит его на этот элемент.
QGraphicsItem принимает владение effect.
Примечание: Эта функция применит эффект к самому себе и всем его дочерним элементам.
См. также graphicsEffect().
void QGraphicsItem::setGroup(QGraphicsItemGroup *group)
Добавляет этот элемент в группу элементов group. Если group равно nullptr, этот элемент удаляется из любой текущей группы и добавляется как дочерний элемент родительского элемента предыдущей группы.
См. также group() и QGraphicsScene::createItemGroup().
void QGraphicsItem::setInputMethodHints(Qt::InputMethodHints hints)
Устанавливает текущие подсказки метода ввода для этого элемента в hints.
См. также inputMethodHints() и inputMethodQuery().
void QGraphicsItem::setOpacity(qreal opacity)
Устанавливает локальную прозрачность этого элемента, от 0.0 (прозрачный) до 1.0 (непрозрачный). Локальная непрозрачность элемента комбинируется с непрозрачностью родителя и предков в effectiveOpacity().
По умолчанию, непрозрачность передается от родителя к дочернему элементу, поэтому, если непрозрачность родителя равна 0.5, а дочернего элемента также 0.5, эффективная непрозрачность дочернего элемента будет 0.25.
Свойство opacity определяет состояние художника, переданного функции paint(). Если элемент кэшируется, т.е., ItemCoordinateCache или DeviceCoordinateCache, эффективное свойство будет применено к кэшу элемента при его отрисовке.
Есть два флага элемента, которые влияют на то, как непрозрачность элемента комбинируется с родителем: ItemIgnoresParentOpacity и ItemDoesntPropagateOpacityToChildren.
Примечание: Установка непрозрачности элемента в 0 не сделает элемент невидимым (согласно isVisible()), но элемент будет обрабатываться как невидимый. См. документацию по setVisible() для получения дополнительной информации.
См. также opacity(), effectiveOpacity() и setVisible().
void QGraphicsItem::setPanelModality(QGraphicsItem::PanelModality panelModality)
Устанавливает модальное состояние для этого элемента на panelModality.
Изменение модальности видимого элемента происходит немедленно.
См. также panelModality().
void QGraphicsItem::setParentItem(QGraphicsItem *newParent)
Устанавливает родительский элемент этого элемента на newParent. Если у этого элемента уже есть родитель, он сначала удаляется из предыдущего родителя. Если newParent равно 0, этот элемент станет верхним элементом.
Обратите внимание, что это неявно добавляет этот графический элемент в сцену родителя. Не нужно добавлять элемент в сцену самостоятельно.
Поведение при вызове этой функции для элемента, являющегося предком newParent, не определено.
См. также parentItem() и childItems().
void QGraphicsItem::setPos(const QPointF &pos)
Устанавливает положение элемента в pos, которое задано в координатах родителя. Для элементов без родителя pos задано в координатах сцены.
Положение элемента описывает его начало (локальные координаты (0, 0)) в координатах родителя.
См. также pos(), scenePos() и Систему координат Визуализации графики.
void QGraphicsItem::setPos(qreal x, qreal y)
Это перегруженная функция.
Эта вспомогательная функция эквивалентна вызову setPos(QPointF(x, y)).
void QGraphicsItem::setRotation(qreal angle)
Устанавливает поворот по часовой стрелке angle, в градусах, вокруг оси Z. Значение по умолчанию равно 0 (т.е., элемент не поворачивается). Присвоение отрицательного значения повернёт элемент против часовой стрелки. Обычно угол поворота находится в диапазоне (-360, 360), но также можно назначать значения вне этого диапазона (например, поворот на 370 градусов эквивалентен повороту на 10 градусов).
Элемент поворачивается вокруг точки начала преобразования, которая по умолчанию равна (0, 0). Вы можете выбрать другую точку начала преобразования, вызвав setTransformOriginPoint().
Поворот комбинируется с масштабом, преобразованием и преобразованиями элемента для отображения системы координат элемента в родительском элементе.
См. также rotation(), setTransformOriginPoint() и Преобразования.
void QGraphicsItem::setScale(qreal factor)
Устанавливает масштаб factor элемента. Масштаб по умолчанию равен 1.0 (т.е., элемент не масштабируется). Коэффициент масштаба 0.0 сведёт элемент к одной точке. Если вы укажете отрицательный коэффициент масштаба, элемент будет перевернут и отображен зеркально (т.е., повернут на 180 градусов).
Элемент масштабируется вокруг точки начала преобразования, которая по умолчанию равна (0, 0). Вы можете выбрать другую точку начала преобразования, вызвав setTransformOriginPoint().
Масштаб комбинируется с поворотом, преобразованием и преобразованиями элемента для отображения системы координат элемента в родительском элементе.
См. также scale(), setTransformOriginPoint() и Пример преобразований.
void QGraphicsItem::setSelected(bool selected)
Если selected равно true и этот элемент выбираем, этот элемент выбирается; в противном случае он снимается с выбора.
Если элемент находится в группе, состояние выбора всей группы переключается этой функцией. Если группа выбрана, все элементы в группе также выбираются, а если группа не выбрана, ни один элемент в группе не выбирается.
Выбираться могут только видимые, активные и выбираемые элементы. Если selected равно true и этот элемент невидим или неактивен или невыбираемый, эта функция ничего не делает.
По умолчанию элементы не могут быть выбраны. Для включения выбора установите флаг ItemIsSelectable.
Эта функция предоставляется для удобства, позволяя индивидуально переключать состояние выбора элемента. Однако более распространённый способ выбора элементов — вызвать QGraphicsScene::setSelectionArea(), которая вызовет эту функцию для всех видимых, активных и выбираемых элементов в заданной области сцены.
См. также isSelected() и QGraphicsScene::selectedItems().
void QGraphicsItem::setToolTip(const QString &toolTip)
Устанавливает подсказку элемента на toolTip. Если toolTip пустая, подсказка элемента очищается.
См. также toolTip() и QToolTip.
void QGraphicsItem::setTransform(const QTransform &matrix, bool combine = false)
Устанавливает текущую матрицу преобразования элемента на matrix.
Если combine равно true, то matrix комбинируется с текущей матрицей; в противном случае matrix заменяет текущую матрицу. По умолчанию combine равно false.
Для упрощения взаимодействия с элементами, использующими преобразованный вид, QGraphicsItem предоставляет функции mapTo... и mapFrom..., которые могут осуществлять преобразование между координатами элементов и сцены. Например, вы можете вызвать mapToScene() для преобразования координат элемента в координаты сцены или mapFromScene() для преобразования из координат сцены в координаты элемента.
Матрица преобразования объединяется с вращением элемента (rotation()), масштабированием (scale()) и преобразованиями (transformations()) в комбинированное преобразование, которое отображает систему координат элемента в его родительский элемент.
См. также transform(), setRotation(), setScale(), setTransformOriginPoint(), Система координат Graphics View и Преобразования.
void QGraphicsItem::setTransformOriginPoint(const QPointF &origin)
Устанавливает точку origin для преобразования в координатах элемента.
См. также transformOriginPoint() и Преобразования.
void QGraphicsItem::setTransformOriginPoint(qreal x, qreal y)
Это перегруженная функция.
Устанавливает точку начала преобразования в координатах элемента. Это эквивалентно вызову setTransformOriginPoint(QPointF(x, y)).
См. также setTransformOriginPoint() и Преобразования.
void QGraphicsItem::setTransformations(const QList<QGraphicsTransform *> &transformations)
Устанавливает список графических преобразований (QGraphicsTransform), которые в настоящее время применяются к этому элементу.
Если вам нужно только повернуть или масштабировать элемент, вы должны вызвать setRotation() или setScale() вместо этого. Если вы хотите применить произвольное преобразование к элементу, вы можете вызвать setTransform().
QGraphicsTransform предназначен для применения и управления цепочкой отдельных операций преобразования к элементу. Это особенно полезно при анимации, где каждая операция преобразования должна интерполироваться независимо или по-разному.
Преобразования объединяются с вращением элемента (rotation()), масштабированием (scale()) и преобразованием (transform()) для отображения системы координат элемента в родительский элемент.
См. также transformations(), scale(), setTransformOriginPoint(), и Преобразования.
void QGraphicsItem::setVisible(bool visible)
Если visible равно true, элемент отображается. В противном случае элемент скрыт. Скрытые элементы не рисуются и не получают никаких событий. В частности, события мыши проходят прямо через скрытые элементы и передаются любому элементу, который может быть позади. Скрытые элементы также невыбираемы, они не могут получить фокус ввода и не обнаруживаются функциями расположения элементов QGraphicsScene.
Если элемент становится невидимым во время захвата мыши (т.е., когда он получает события мыши), он автоматически потеряет захват мыши, и захват не восстанавливается при повторном отображении элемента; для восстановления захвата мыши необходимо новое нажатие мыши.
Аналогично, скрытый элемент не может получить фокус, поэтому, если элемент имеет фокус, когда он становится скрытым, он потеряет фокус, и фокус не восстанавливается, просто сделав элемент видимым снова.
Если вы скрываете родительский элемент, все его дочерние элементы также будут скрыты. Если вы отображаете родительский элемент, все дочерние элементы будут отображаться, если только они не были явно скрыты (т. е., если вы вызовите setVisible(false) для дочернего элемента, он не будет отображен снова, даже если его родительский элемент скрыт и снова отображен).
Элементы отображаются по умолчанию; нет необходимости вызывать setVisible() для нового элемента.
Примечание: Элемент с непрозрачностью, установленной в 0, по-прежнему считается видимым, хотя он будет обрабатываться как невидимый элемент: события мыши будут проходить через него, он не будет включён в элементы, возвращаемые QGraphicsView::items(), и т. д. Однако элемент сохранит фокус.
См. также isVisible(), show(), hide() и setOpacity().
void QGraphicsItem::setX(qreal x)
Устанавливает координату x позиции элемента. Эквивалентно вызову setPos(x, y()).
void QGraphicsItem::setY(qreal y)
Устанавливает координату y позиции элемента. Эквивалентно вызову setPos(x(), y).
См. также y(), x() и setPos().
void QGraphicsItem::setZValue(qreal z)
Устанавливает значение Z элемента на z. Значение Z определяет порядок стекирования элементов-братьев (соседних) элементов. Элемент-брат с высоким значением Z всегда будет нарисован поверх другого элемента-брата с меньшим значением Z.
Если вы восстановите значение Z, порядок вставки элемента будет определять порядок стекирования.
Значение Z не влияет на размер элемента.
Значение Z по умолчанию равно 0.
См. также zValue(), Сортировка, stackBefore() и ItemStacksBehindParent.
QPainterPath QGraphicsItem::shape() const
Возвращает форму этого элемента в виде QPainterPath в локальных координатах. Форма используется для многих целей, включая обнаружение столкновений, проверки попадания и для функций QGraphicsScene::items().
Реализация по умолчанию вызывает boundingRect() для возвращения простой прямоугольной формы, но подклассы могут переопределить эту функцию для возвращения более точной формы для элементов, не являющихся прямоугольниками. Например, круглый элемент может выбрать возвращение эллиптической формы для лучшего обнаружения столкновений. Например:
Контур формы может изменяться в зависимости от ширины и стиля пера, используемого при рисовании. Если вы хотите включить этот контур в форму элемента, вы можете создать форму из обводки с помощью QPainterPathStroker.
Эта функция вызывается реализациями по умолчанию функций contains() и collidesWithPath().
См. также boundingRect(), contains(), prepareGeometryChange() и QPainterPathStroker.
void QGraphicsItem::show()
Отображает элемент (элементы отображаются по умолчанию).
Эта вспомогательная функция эквивалентна вызову setVisible(true).
См. также hide() и setVisible().
void QGraphicsItem::stackBefore(const QGraphicsItem *sibling)
Размещает этот элемент перед элементом sibling, который должен быть элементом-братом (т. е., два элемента должны иметь одного и того же родителя или оба должны быть элементами верхнего уровня). Элемент sibling должен иметь такое же значение Z, как и этот элемент, в противном случае вызов этой функции не даст никакого результата.
По умолчанию все элементы-братья стекируются в порядке вставки (т. е., первый добавленный элемент рисуется перед следующим добавленным). Если значения Z двух элементов отличаются, элемент с наибольшим значением Z рисуется поверх. Когда значения Z одинаковые, порядок вставки определит порядок стекирования.
См. также setZValue(), ItemStacksBehindParent и Сортировка.
QGraphicsObject *QGraphicsItem::toGraphicsObject()
Возвращает графический элемент, преобразованный к типу QGraphicsObject, если класс фактически является графическим объектом, в противном случае 0.
const QGraphicsObject *QGraphicsItem::toGraphicsObject() const
Возвращает графический элемент, преобразованный к типу QGraphicsObject, если класс фактически является графическим объектом, в противном случае 0.
QString QGraphicsItem::toolTip() const
Возвращает всплывающую подсказку элемента или пустую QString, если всплывающая подсказка не была установлена.
См. также setToolTip() и QToolTip.
QGraphicsItem *QGraphicsItem::topLevelItem() const
Возвращает элемент верхнего уровня данного элемента. Элемент верхнего уровня — это самый верхний родительский элемент, чьим родителем является nullptr. Если у элемента нет родителя, возвращается указатель на него самого (то есть элемент верхнего уровня — это сам этот элемент).
См. также parentItem().
QGraphicsWidget *QGraphicsItem::topLevelWidget() const
Возвращает указатель на виджет верхнего уровня элемента (то есть предка, чьим родителем является nullptr, или чьим родителем не является виджет), или nullptr, если у данного элемента нет виджета верхнего уровня. Если элемент является своим собственным виджетом верхнего уровня, функция возвращает указатель на сам элемент.
QTransform QGraphicsItem::transform() const
Возвращает матрицу преобразования данного элемента.
Матрица преобразования комбинируется с вращением (rotation()), масштабированием (scale()) и преобразованиями (transformations()) элемента в комбинированную матрицу преобразований для элемента.
По умолчанию матрица преобразования — единичная матрица.
См. также setTransform() и sceneTransform().
QPointF QGraphicsItem::transformOriginPoint() const
Возвращает точку начала преобразования в координатах элемента.
По умолчанию это QPointF(0,0).
См. также setTransformOriginPoint() и Преобразования.
QList<QGraphicsTransform *> QGraphicsItem::transformations() const
Возвращает список графических преобразований, которые в настоящее время применяются к этому элементу.
QGraphicsTransform предназначен для применения и управления цепочкой отдельных операций преобразования над элементом. Он особенно полезен при анимациях, где каждая операция преобразования должна интерполироваться независимо или по-разному.
Преобразования комбинируются с вращением (rotation()), масштабированием (scale()) и преобразованием (transform()) элемента для отображения системы координат элемента в родительский элемент.
См. также setTransformations(), scale(), rotation(), transformOriginPoint(), и Преобразования.
[virtual] int QGraphicsItem::type() const
Возвращает тип элемента как целое число. Все стандартные классы графических элементов связаны с уникальным значением; см. QGraphicsItem::Type. Эта информация о типе используется функцией qgraphicsitem_cast() для различения типов.
Реализация по умолчанию (в QGraphicsItem) возвращает UserType.
Чтобы использовать qgraphicsitem_cast() с пользовательским элементом, переопределите эту функцию и объявите значение перечисления Type, равное типу вашего пользовательского элемента. Пользовательские элементы должны возвращать значение, большее или равное UserType (65536).
Например:
class CustomItem : public QGraphicsItem
{
public:
enum { Type = UserType + 1 };
int type() const override
{
// Enable the use of qgraphicsitem_cast with this item.
return Type;
}
...
}; См. также UserType.
void QGraphicsItem::ungrabKeyboard()
Освобождает захват клавиатуры.
См. также grabKeyboard() и ungrabMouse().
void QGraphicsItem::ungrabMouse()
Освобождает захват мыши.
См. также grabMouse() и ungrabKeyboard().
void QGraphicsItem::unsetCursor()
Очищает курсор с этого элемента.
См. также hasCursor() и setCursor().
void QGraphicsItem::update(const QRectF &rect = QRectF())
Планирует перерисовку области, покрытой rect, в этом элементе. Вы можете вызвать эту функцию всякий раз, когда ваш элемент необходимо перерисовать, например, если он изменил внешний вид или размер.
Эта функция не вызывает немедленную перерисовку; вместо этого она планирует запрос на перерисовку, который обрабатывается QGraphicsView после того, как управление переходит в цикл обработки событий. Элемент будет перерисован только в том случае, если он виден в каком-либо связанном представлении.
В качестве побочного эффекта перерисовки элемента, другие элементы, которые перекрывают область rect, также могут быть перерисованы.
Если элемент невидим (т.е., isVisible() возвращает false), эта функция ничего не делает.
См. также paint() и boundingRect().
void QGraphicsItem::update(qreal x, qreal y, qreal width, qreal height)
Это перегруженная функция.
Эта вспомогательная функция эквивалентна вызову update(QRectF(x, y, width, height)).
[protected] void QGraphicsItem::updateMicroFocus()
Обновляет микрофокус элемента.
См. также QInputMethod.
[virtual protected] void QGraphicsItem::wheelEvent(QGraphicsSceneWheelEvent *event)
Обработчик событий, для события event, может быть переопределен для получения событий прокрутки для этого элемента. Если вы переопределите эту функцию, event будет принят по умолчанию.
Если вы игнорируете событие (т. е., вызывая QEvent::ignore()), оно будет передано любому элементу под этим элементом. Если ни один элемент не принимает событие, оно будет проигнорировано сценой и перейдет к представлению (например, к вертикальной полосе прокрутки представления).
Реализация по умолчанию игнорирует событие.
См. также sceneEvent().
QGraphicsWidget *QGraphicsItem::window() const
Возвращает окно элемента, или nullptr, если у этого элемента нет окна. Если элемент является окном, он вернет себя. В противном случае он вернет самого ближайшего предка, являющегося окном.
См. также QGraphicsWidget::isWindow().
qreal QGraphicsItem::x() const
Эта вспомогательная функция эквивалентна вызову pos().x().
qreal QGraphicsItem::y() const
Эта вспомогательная функция эквивалентна вызову pos().y().
qreal QGraphicsItem::zValue() const
Возвращает значение Z элемента. Значение Z влияет на порядок стекирования элементов-братьев (соседних) элементов.
Значение Z по умолчанию равно 0.
См. также setZValue(), Сортировка, stackBefore(), и ItemStacksBehindParent.
Связанные нечлены
template <typename T> T qgraphicsitem_cast(QGraphicsItem *item)
Возвращает заданный item, отформатированный как тип T, если item является типом T; в противном случае возвращается nullptr.
Примечание: Чтобы эта функция работала правильно с пользовательскими элементами, переопределите функцию type() для каждого подкласса пользовательского QGraphicsItem.
См. также QGraphicsItem::type() и QGraphicsItem::UserType.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qgraphicsitem.html