Класс QSGNode
Класс QSGNode является базовым классом для всех узлов в графическом дереве сцены. Подробнее...
| Заголовок: | #include <QSGNode> |
| CMake: | find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| Наследуется от: | QSGBasicGeometryNode, QSGOpacityNode, QSGRenderNode и QSGTransformNode |
Открытые типы
| флаги | DirtyState |
| перечисление | DirtyStateBit { DirtyMatrix, DirtyNodeAdded, DirtyNodeRemoved, DirtyGeometry, DirtyMaterial, …, 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 |
| QSGNode::Flags | flags() const |
| void | insertChildNodeAfter(QSGNode *node, QSGNode *after) |
| void | insertChildNodeBefore(QSGNode *node, QSGNode *before) |
| виртуальный bool | isSubtreeBlocked() const |
| QSGNode * | lastChild() const |
| void | markDirty(QSGNode::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(QSGNode::Flag f, bool enabled = true) |
| void | setFlags(QSGNode::Flags f, bool enabled = true) |
| QSGNode::NodeType | type() const |
Подробное описание
Класс 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.
См. также 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 — это псевдоним для QFlags<Flag>. Он хранит логическое ИЛИ комбинацию значений Flag.
Перечисление QSGNode::NodeType
Может быть использовано для определения типа узла.
| Константа | Значение | Описание |
|---|---|---|
QSGNode::BasicNodeType |
0 |
Тип узла QSGNode |
QSGNode::GeometryNodeType |
1 |
Тип узла QSGGeometryNode |
QSGNode::TransformNodeType |
2 |
Тип узла QSGTransformNode |
QSGNode::ClipNodeType |
3 |
Тип узла QSGClipNode |
QSGNode::OpacityNodeType |
4 |
Тип узла QSGOpacityNode |
QSGNode::RenderNodeType |
6 |
Тип узла 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
Возвращает первый дочерний узел этого узла.
Дочерние узлы хранятся в связанном списке.
QSGNode::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(QSGNode::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(QSGNode::Flag f, bool enabled = true)
Устанавливает флаг f для этого узла, если enabled имеет значение true; в противном случае очищает флаг.
См. также flags().
void QSGNode::setFlags(QSGNode::Flags f, bool enabled = true)
Устанавливает флаги f для этого узла, если enabled имеет значение true; в противном случае очищает флаги.
См. также flags().
QSGNode::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-6.2/qsgnode.html