Класс QSGNode
Класс QSGNode является базовым классом для всех узлов в графическом представлении сцены. Подробнее...
| Заголовок: | #include <QSGNode> |
| 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() | |
| virtual | ~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) |
| virtual bool | isSubtreeBlocked() const |
| QSGNode * | lastChild() const |
| void | markDirty(QSGNode::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(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() может использоваться для отключения всего поддерева. Узлы в заблокированном поддереве не будут предварительно обрабатываться() и не будут отображаться.
Примечание: Все классы с префиксом 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 |
Зарезервировано для внутреннего использования. |
Тип 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 |
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-5.15/qsgnode.html