Класс QSGNode
Класс QSGNode является базовым классом для всех узлов в дереве сцены. Подробнее...
| Заголовок: | #include <QSGNode> |
| qmake: | QT += quick |
| Наследуется от: | QSGBasicGeometryNode, QSGOpacityNode, QSGRenderNode и QSGTransformNode |
Типы публичного доступа
| флаги | DirtyState |
| перечисление | DirtyStateBit { DirtyMatrix, DirtyNodeAdded, DirtyNodeRemoved, DirtyGeometry, ..., DirtySubtreeBlocked } |
| перечисление | Flag { OwnedByParent, UsePreprocess, OwnsGeometry, OwnsMaterial, OwnsOpaqueMaterial, InternalReserved } |
| флаги | Flags |
| перечисление | NodeType { BasicNodeType, GeometryNodeType, TransformNodeType, ClipNodeType, OpacityNodeType, RenderNodeType } |
Функции публичного доступа
| QSGNode() | |
| виртуальный | ~QSGNode() |
| void | appendChildNode(QSGNode *node) |
| QSGNode * | childAtIndex(int i) const |
| int | childCount() const |
| QSGNode * | firstChild() const |
| Flags | flags() const |
| void | insertChildNodeAfter(QSGNode *node, QSGNode *after) |
| void | insertChildNodeBefore(QSGNode *node, QSGNode *before) |
| виртуальный bool | isSubtreeBlocked() const |
| QSGNode * | lastChild() const |
| void | markDirty(DirtyState bits) |
| QSGNode * | nextSibling() const |
| QSGNode * | parent() const |
| void | prependChildNode(QSGNode *node) |
| виртуальный void | preprocess() |
| QSGNode * | previousSibling() const |
| void | removeAllChildNodes() |
| void | removeChildNode(QSGNode *node) |
| void | setFlag(Flag f, bool enabled = true) |
| void | setFlags(Flags f, bool enabled = true) |
| NodeType | type() const |
Подробное описание
Класс QSGNode является базовым классом для всех узлов в дереве сцены.
Класс QSGNode может использоваться как контейнер для дочерних элементов. Дочерние элементы добавляются с помощью appendChildNode(), prependChildNode(), insertChildNodeBefore() и insertChildNodeAfter(). Порядок узлов важен, так как геометрические узлы отображаются в соответствии с их порядком в дереве сцены.
Узлы дерева сцены содержат механизм для описания, какие части сцены изменились. Это включает объединённые матрицы, накопленную непрозрачность, изменения в иерархии узлов и так далее. Эта информация может использоваться для оптимизации внутри рендерера дерева сцены. Для правильного отображения узлов рендерером важно, чтобы пользователи вызывали QSGNode::markDirty() с правильными флагами при изменении узлов. Большинство функций в классах узлов неявно вызывают markDirty(). Например, QSGNode::appendChildNode() вызовет markDirty(), передавая QSGNode::DirtyNodeAdded.
Если узлы меняются каждый кадр, функция preprocess() может быть использована для применения изменений к узлу для каждого кадра, в котором он отображается. Использование preprocess() должно быть явно включено, установив флаг QSGNode::UsePreprocess для узла.
Виртуальная функция isSubtreeBlocked() может быть использована для отключения целого поддерева. Узлы в заблокированном поддереве не будут обрабатываться функцией preprocess() и не будут отображаться.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга дерева сцены. См. Дерево сцены и рендеринг для получения дополнительной информации.
Документация по типам членов
перечисление QSGNode::DirtyStateBitфлаги QSGNode::DirtyState
Используется в QSGNode::markDirty() для указания того, как изменилось дерево сцены.
| Константа | Значение | Описание |
|---|---|---|
QSGNode::DirtyMatrix |
0x0100 |
Матрица в QSGTransformNode изменилась. |
QSGNode::DirtyNodeAdded |
0x0400 |
Добавлен узел. |
QSGNode::DirtyNodeRemoved |
0x0800 |
Узел удален. |
QSGNode::DirtyGeometry |
0x1000 |
Изменилась геометрия QSGGeometryNode. |
QSGNode::DirtyMaterial |
0x2000 |
Изменился материал QSGGeometryNode. |
QSGNode::DirtyOpacity |
0x4000 |
Изменилась непрозрачность QSGOpacityNode. |
QSGNode::DirtySubtreeBlocked |
0x0080 |
Поддерево заблокировано. |
Тип DirtyState — это псевдоним для QFlags<DirtyStateBit>. Он хранит комбинацию значений DirtyStateBit через операцию OR.
См. также QSGNode::markDirty().
перечисление QSGNode::Flagфлаги QSGNode::Flags
Перечисление QSGNode::Flag описывает флаги для QSGNode
| Константа | Значение | Описание |
|---|---|---|
QSGNode::OwnedByParent |
0x0001 |
Узел принадлежит своему родителю и будет удалён при удалении родителя. |
QSGNode::UsePreprocess |
0x0002 |
Функция предварительной обработки узла preprocess() будет вызвана перед началом отрисовки. |
QSGNode::OwnsGeometry |
0x00010000 |
Действительно только для QSGGeometryNode и QSGClipNode. Узел владеет экземпляром QSGGeometry и удалит его при уничтожении узла или при назначении новой геометрии. |
QSGNode::OwnsMaterial |
0x00020000 |
Действительно только для QSGGeometryNode. Узел владеет материалом и удалит его при уничтожении узла или при назначении нового материала. |
QSGNode::OwnsOpaqueMaterial |
0x00040000 |
Действительно только для QSGGeometryNode. Узел владеет непрозрачным материалом и удалит его при уничтожении узла или при назначении нового материала. |
QSGNode::InternalReserved |
0x01000000 |
Зарезервировано для внутреннего использования. |
Тип Флаги — это typedef для QFlags<Флаг>. Он хранит логическое ИЛИ комбинацию значений Флаг.
перечисление QSGNode::NodeType
Может использоваться для определения типа узла.
| Константа | Значение | Описание |
|---|---|---|
QSGNode::BasicNodeType |
0 |
Тип QSGNode |
QSGNode::GeometryNodeType |
1 |
Тип QSGGeometryNode |
QSGNode::TransformNodeType |
2 |
Тип QSGTransformNode |
QSGNode::ClipNodeType |
3 |
Тип QSGClipNode |
QSGNode::OpacityNodeType |
4 |
Тип QSGOpacityNode |
QSGNode::RenderNodeType |
5 |
Тип QSGRenderNode |
См. также type().
Документация по функциям-членам
QSGNode::QSGNode()
Создаёт новый узел.
[virtual] QSGNode::~QSGNode()
Уничтожает узел.
Каждый дочерний узел этого узла, у которого установлен флаг QSGNode::OwnedByParent, также будет удалён.
void QSGNode::appendChildNode(QSGNode *node)
Добавляет node в список дочерних узлов этого узла.
Порядок узлов важен, так как геометрические узлы будут отрисованы в порядке их добавления в граф сцены.
QSGNode *QSGNode::childAtIndex(int i) const
Возвращает дочерний узел по индексу i.
Дочерние узлы хранятся во внутреннем связанном списке, поэтому итерация по дочерним узлам по индексу не является оптимальной.
int QSGNode::childCount() const
Возвращает количество дочерних узлов.
QSGNode *QSGNode::firstChild() const
Возвращает первый дочерний узел этого узла.
Дочерние узлы хранятся в связанном списке.
Flags QSGNode::flags() const
Возвращает набор флагов для этого узла.
См. также setFlags().
void QSGNode::insertChildNodeAfter(QSGNode *node, QSGNode *after)
Вставляет node в список дочерних узлов этого узла после узла, указанного с помощью after.
Порядок узлов важен, так как геометрические узлы будут отрисованы в порядке их добавления в граф сцены.
void QSGNode::insertChildNodeBefore(QSGNode *node, QSGNode *before)
Вставляет node в список дочерних узлов этого узла перед узлом, указанным с помощью before.
Порядок узлов важен, так как геометрические узлы будут отрисованы в порядке их добавления в граф сцены.
[virtual] bool QSGNode::isSubtreeBlocked() const
Возвращает, доступен ли этот узел и его поддерево для использования.
Заблокированные поддеревья не будут получать обновления состояния грязности и не будут отрисовываться.
Например, QSGOpacityNode вернёт заблокированное поддерево, когда накопленная непрозрачность равна 0.
QSGNode *QSGNode::lastChild() const
Возвращает последний дочерний узел этого узла.
Дочерние узлы хранятся в связанном списке.
void QSGNode::markDirty(DirtyState bits)
Уведомляет все подключённые отрисовщики, что узел имеет грязные bits.
QSGNode *QSGNode::nextSibling() const
Возвращает узел, следующий после этого в списке дочерних узлов родительского узла.
Дочерние узлы хранятся в связанном списке.
QSGNode *QSGNode::parent() const
Возвращает родительский узел этого узла.
void QSGNode::prependChildNode(QSGNode *node)
Добавляет node в начало списка дочерних узлов этого узла.
Порядок узлов важен, так как геометрические узлы будут отрисованы в порядке их добавления в граф сцены.
[virtual] void QSGNode::preprocess()
Переопределите эту функцию, чтобы выполнить обработку узла перед его отрисовкой.
Предварительная обработка должна быть явно включена, установив флаг QSGNode::UsePreprocess. Флаг необходимо установить перед добавлением узла в граф сцены, что вызовет функцию preprocess() для каждого кадра, в котором узел отрисовывается.
Предупреждение: Будьте осторожны с удалением узлов во время их предварительной обработки. Возможно, с небольшим снижением производительности, удалить отдельный узел во время его вызова preprocess(). Удаление поддерева, у которого есть узлы, также использующие предварительную обработку, может привести к сегменту-ошибке. Это сделано по соображениям производительности.
QSGNode *QSGNode::previousSibling() const
Возвращает узел, предшествующий этому в списке дочерних узлов родительского узла.
Дочерние узлы хранятся в связанном списке.
void QSGNode::removeAllChildNodes()
Удаляет все дочерние узлы из списка дочерних узлов этого узла.
void QSGNode::removeChildNode(QSGNode *node)
Удаляет node из списка дочерних узлов этого узла.
void QSGNode::setFlag(Flag f, bool enabled = true)
Устанавливает флаг f для этого узла, если enabled равно true; в противном случае очищает флаг.
См. также flags().
void QSGNode::setFlags(Flags f, bool enabled = true)
Устанавливает флаги f для этого узла, если enabled равно true; в противном случае очищает флаги.
См. также flags().
NodeType QSGNode::type() const
Возвращает тип этого узла. Тип узла должен быть одним из предопределённых типов, определённых в QSGNode::NodeType, и может безопасно использоваться для приведения к соответствующему классу.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qsgnode.html