Класс 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 * | parentObject() const |
| QGraphicsWidget * | parentWidget() const |
| QPointF | pos() const |
| void | removeSceneEventFilter(QGraphicsItem *filterItem) |
| void | resetTransform() |
| qreal | rotation() const |
| qreal | scale() const |
| QGraphicsScene * | scene() const |
| QRectF | sceneBoundingRect() const |
| QPointF | scenePos() const |
| QTransform | sceneTransform() const |
| void | scroll(qreal dx, qreal dy, const QRectF &rect = QRectF()) |
| void | setAcceptDrops(bool on) |
| void | setAcceptHoverEvents(bool enabled) |
| void | setAcceptTouchEvents(bool enabled) |
| void | setAcceptedMouseButtons(Qt::MouseButtons buttons) |
| void | setActive(bool active) |
| void | setBoundingRegionGranularity(qreal granularity) |
| void | setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize()) |
| void | setCursor(const QCursor &cursor) |
| void | setData(int key, const QVariant &value) |
| void | setEnabled(bool enabled) |
| void | setFiltersChildEvents(bool enabled) |
| void | setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true) |
| void | setFlags(QGraphicsItem::GraphicsItemFlags flags) |
| void | setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason) |
| void | setFocusProxy(QGraphicsItem *item) |
| void | setGraphicsEffect(QGraphicsEffect *effect) |
| void | setGroup(QGraphicsItemGroup *group) |
| void | setInputMethodHints(Qt::InputMethodHints hints) |
| void | setOpacity(qreal opacity) |
| void | setPanelModality(QGraphicsItem::PanelModality panelModality) |
| void | setParentItem(QGraphicsItem *newParent) |
| void | setPos(const QPointF &pos) |
| void | setPos(qreal x, qreal y) |
| void | setRotation(qreal angle) |
| void | setScale(qreal factor) |
| void | setSelected(bool selected) |
| void | setToolTip(const QString &toolTip) |
| void | setTransform(const QTransform &matrix, bool combine = false) |
| void | setTransformOriginPoint(const QPointF &origin) |
| void | setTransformOriginPoint(qreal x, qreal y) |
| void | setTransformations(const QList<QGraphicsTransform *> &transformations) |
| void | setVisible(bool visible) |
| void | setX(qreal x) |
| void | setY(qreal y) |
| void | setZValue(qreal z) |
| virtual QPainterPath | shape() const |
| void | show() |
| void | stackBefore(const QGraphicsItem *sibling) |
| QGraphicsObject * | toGraphicsObject() |
| const QGraphicsObject * | toGraphicsObject() const |
| QString | toolTip() const |
| QGraphicsItem * | topLevelItem() const |
| QGraphicsWidget * | topLevelWidget() const |
| QTransform | transform() const |
| QPointF | transformOriginPoint() const |
| QList<QGraphicsTransform *> | transformations() const |
| virtual int | type() const |
| void | ungrabKeyboard() |
| 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() для планирования перерисовки, при необходимости передавая прямоугольник, который нужно перерисовать. В зависимости от того, виден ли элемент в представлении, он может быть перерисован или нет; в QGraphicsItem нет эквивалента QWidget::repaint().
Элементы отрисовываются представлением, начиная с родительских элементов, а затем рисуя дочерние элементы в порядке возрастания стека. Вы можете установить порядок стека элемента, вызвав 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. |
переключает фокус на элементы под ним при щелчке по ним. Этот флаг позволяет создавать элемент, не реагирующий на фокус, на который можно нажать, не изменяя фокус.
ItemStopsClickFocusPropagation, но также подавляет выход из фокуса. Этот флаг позволяет полностью взять на себя обработку фокуса. Этот флаг был добавлен в Qt 4.7.
| Постоянная | Значение | Описание |
|---|---|---|
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()
Изъятие фокуса клавиатуры из элемента.
Если у него есть фокус, этому элементу отправляется событие focus out для уведомления о том, что он теряет фокус.
Только элементы, установившие флаг 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() для other возвращаемые координаты должны быть отображены в системе координат этого элемента, прежде чем произойдёт любое пересечение.
См. также 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
Возвращает текущую форму курсора для элемента. Курсор мыши примет эту форму, когда он будет над этим элементом. См. список предопределённых объектов курсора для ряда полезных форм.
Элемент редактора может захотеть использовать курсор в виде лупы:
item->setCursor(Qt::IBeamCursor);
Если курсор не был установлен, используется курсор элемента под ним.
См. также setCursor(), hasCursor(), unsetCursor(), QWidget::cursor и QApplication::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.
bool 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 и такого преобразования не существует, значение boolean, на которое указывает 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() и Система координат Визуализации графики.
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() и Система координат Визуализации графики.
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() и Система координат Визуализации графики.
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() и Система координат Визуализации графики.
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() и Система координат Визуализации графики.
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QRectF &rect) const
Преобразует прямоугольник rect, заданный в системе координат этого элемента, в систему координат элемента item и возвращает преобразованный прямоугольник в виде многоугольника.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Система координат Визуализации графики.
QPolygonF QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const
Преобразует многоугольник polygon, заданный в системе координат этого элемента, в систему координат элемента item и возвращает преобразованный многоугольник.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Система координат Визуализации графики.
QPainterPath QGraphicsItem::mapToItem(const QGraphicsItem *item, const QPainterPath &path) const
Преобразует путь path, заданный в системе координат этого элемента, в систему координат элемента item и возвращает преобразованный путь.
Если item является nullptr, эта функция возвращает то же, что и mapToScene().
См. также itemTransform(), mapToParent(), mapToScene(), mapFromItem() и Система координат Визуализации графики.
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)).
[virtual protected] void QGraphicsItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Обработчик этого события, для события event, может быть переопределён для получения событий двойного щелчка мыши для этого элемента.
При двойном щелчке по элементу, элемент сначала получит событие нажатия мыши, за которым последует событие отпускания (т.е., щелчок), затем событие двойного щелчка, и, наконец, событие отпускания.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
Реализация по умолчанию вызывает mousePressEvent(). Если при переопределении этой функции вы хотите сохранить базовую реализацию, вызовите QGraphicsItem::mouseDoubleClickEvent() в вашей переопределённой функции.
Обратите внимание, что элемент не получит событий двойного щелчка, если он не является выделяемым ни перемещаемым (щелчки мышью в этом случае игнорируются, и это останавливает генерацию двойных щелчков).
См. также mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), и sceneEvent().
[virtual protected] void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Этот обработчик событий, для события event, может быть переопределён для получения событий перемещения мыши для этого элемента. Если вы получаете это событие, вы можете быть уверены, что этот элемент также получил событие нажатия мыши, и что этот элемент является текущим захватом мыши.
Вызов QEvent::ignore() или QEvent::accept() для event не имеет эффекта.
Реализация по умолчанию обрабатывает основное взаимодействие с элементом, такое как выделение и перемещение. Если при переопределении этой функции вы хотите сохранить базовую реализацию, вызовите QGraphicsItem::mouseMoveEvent() в вашей переопределённой функции.
Обратите внимание, что mousePressEvent() определяет, какой графический элемент получит события мыши. Подробности см. в описании mousePressEvent().
См. также mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), и sceneEvent().
[virtual protected] 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(). См. документацию 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() и Система координат графического представления.
[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, чтобы предотвратить дальнейшую обработку данного события, гарантируя, что оно не будет доставлено наблюдаемому элементу, или возвращать 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. Курсор мыши примет эту форму, когда он будет над этим элементом. Список предопределённых объектов курсора см. в списке предопределенных объектов курсора для различных полезных форм.
Элемент редактора может использовать курсор «лучеобразный символ»:
item->setCursor(Qt::IBeamCursor);
Если курсор не был установлен, используется курсор элемента, находящегося под ним.
См. также cursor(), hasCursor(), unsetCursor(), QWidget::cursor и QApplication::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, могут принимать фокус клавиатуры.
Если этот элемент не видим, не активен или не связан со сценой, он не получит немедленный фокус ввода. Однако он будет зарегистрирован как предпочтительный элемент фокуса для его поддерева элементов, если он впоследствии станет видимым.
В результате вызова этой функции этот элемент получит событие focus in с focusReason. Если другой элемент уже имеет фокус, этот элемент сначала получит событие focus out, указывающее, что он потерял фокус ввода.
См. также clearFocus(), hasFocus(), focusItem() и focusProxy().
END_OF_DOCUMENT_MARKERvoid 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().
Поворот комбинируется со масштабом элемента, transform() и transformations() для отображения системы координат элемента в системе координат родительского элемента.
См. также rotation(), setTransformOriginPoint(), и Преобразования.
void QGraphicsItem::setScale(qreal factor)
Устанавливает коэффициент масштабирования factor элемента. Значение по умолчанию равно 1.0 (т.е., элемент не масштабируется). Значение коэффициента масштабирования 0.0 сжимает элемент до одной точки. Если вы укажете отрицательный коэффициент масштабирования, элемент будет перевёрнут и отображаться зеркально (т.е., повернут на 180 градусов).
Элемент масштабируется относительно точки начала преобразований, которая по умолчанию равна (0, 0). Вы можете выбрать другую точку начала преобразований, вызвав setTransformOriginPoint().
Масштабирование комбинируется с поворотом элемента, transform() и transformations() для отображения системы координат элемента в системе координат родительского элемента.
См. также 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(), Система координат графического представления и Преобразования.
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.
[virtual] QPainterPath QGraphicsItem::shape() const
Возвращает форму этого элемента в виде QPainterPath в локальных координатах. Форма используется для многих задач, включая обнаружение столкновений, проверки попадания и для функций QGraphicsScene::items().
Реализация по умолчанию вызывает boundingRect() для возвращения простой прямоугольной формы, но подклассы могут переопределить эту функцию, чтобы возвращать более точную форму для элементов, не являющихся прямоугольниками. Например, круглый элемент может выбрать возвращение эллиптической формы для лучшего обнаружения столкновений. Например:
QPainterPath RoundItem::shape() const
{
QPainterPath path;
path.addEllipse(boundingRect());
return path;
} Контур формы может изменяться в зависимости от ширины и стиля пера, используемого при рисовании. Если вы хотите включить этот контур в форму элемента, вы можете создать форму из обводки, используя 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.1/qgraphicsitem.html