Класс QSGNode
Класс QSGNode является базовым классом для всех узлов в дереве сцены. Подробнее...
| Заголовок: | #include <QSGNode> |
| qmake: | QT += quick |
| Наследуется от: |
Типы
| флаги | DirtyState |
| перечисление | DirtyStateBit { DirtyMatrix, DirtyNodeAdded, DirtyNodeRemoved, DirtyGeometry, DirtyMaterial, DirtyOpacity } |
| перечисление | Flag { OwnedByParent, UsePreprocess, OwnsGeometry, OwnsMaterial, OwnsOpaqueMaterial, InternalReserved } |
| флаги | Flags |
| перечисление | NodeType { BasicNodeType, GeometryNodeType, TransformNodeType, ClipNodeType, OpacityNodeType } |
Открытые функции
| QSGNode() | |
| virtual | ~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) |
| virtual bool | isSubtreeBlocked() const |
| QSGNode * | lastChild() const |
| void | markDirty(DirtyState bits) |
| QSGNode * | nextSibling() const |
| QSGNode * | parent() const |
| void | prependChildNode(QSGNode *node) |
| virtual 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. |
Тип DirtyState является типом-синонимом для QFlags<DirtyStateBit>. Он хранит результат побитового ИЛИ для значений DirtyStateBit.
См. также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 |
Зарезервировано для внутреннего использования. |
Тип Flags — это typedef для QFlags<Flag>. Он хранит логическое ИЛИ сочетание значений Flag.
enum QSGNode::NodeType
Может использоваться для определения типа узла.
| Константа | Значение | Описание |
|---|---|---|
QSGNode::BasicNodeType |
0 |
Тип узла QSGNode |
QSGNode::GeometryNodeType |
1 |
Тип узла QSGGeometryNode |
QSGNode::TransformNodeType |
2 |
Тип узла QSGTransformNode |
QSGNode::ClipNodeType |
3 |
Тип узла QSGClipNode |
QSGNode::OpacityNodeType |
4 |
Тип узла QSGOpacityNode |
См. также 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() для каждого кадра отрисовки узла.
Функция предварительной обработки вызывается до прохода обновления, который распространяет непрозрачность и преобразования по графику сцены. Это означает, что такие функции, как QSGOpacityNode::combinedOpacity() и QSGTransformNode::combinedMatrix(), не будут содержать актуальных значений. Если такие значения изменяются во время предварительной обработки, эти изменения будут распространены по графику сцены перед его отрисовкой.
Предупреждение: Будьте осторожны при удалении узлов во время их предварительной обработки. Возможно, с небольшой потерей производительности, удалить один узел во время его собственного вызова 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/archives/qt-5.6/qsgnode.html