QCanvasPath Class
QCanvasPath es el formato de ruta nativo de QCanvasPainter. Más...
| Cabecera: | #include <QCanvasPath> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| Desde: | Qt 6.11 |
| Estado: | Avance técnico |
Funciones públicas
| QCanvasPath() | |
| QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1) | |
| QCanvasPath(const QCanvasPath &path) | |
| QCanvasPath(QCanvasPath &&other) | |
| ~QCanvasPath() | |
| void | addPath(const QCanvasPath &path, const QTransform &transform = QTransform()) |
| void | addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform()) |
| void | arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected) |
| void | arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected) |
| void | arcTo(float x1, float y1, float x2, float y2, float radius) |
| void | arcTo(QPointF point1, QPointF point2, float radius) |
| void | beginHoleSubPath() |
| void | beginSolidSubPath() |
| void | bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y) |
| void | bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint) |
| void | circle(float x, float y, float radius) |
| void | circle(QPointF centerPoint, float radius) |
| void | clear() |
| void | closePath() |
| qsizetype | commandsCapacity() const |
| qsizetype | commandsDataCapacity() const |
| qsizetype | commandsDataSize() const |
| qsizetype | commandsSize() const |
| QPointF | currentPosition() const |
| void | ellipse(float x, float y, float radiusX, float radiusY) |
| void | ellipse(const QRectF &rect) |
| bool | isEmpty() const |
| void | lineTo(QPointF point) |
| void | lineTo(float x, float y) |
| void | moveTo(QPointF point) |
| void | moveTo(float x, float y) |
| QPointF | positionAt(qsizetype index) const |
| void | quadraticCurveTo(float cpX, float cpY, float x, float y) |
| void | quadraticCurveTo(QPointF controlPoint, QPointF endPoint) |
| void | rect(float x, float y, float width, float height) |
| void | rect(const QRectF &rect) |
| void | reserve(qsizetype commandsSize, qsizetype commandsDataSize) |
| void | reserve(qsizetype commandsSize) |
| void | roundRect(float x, float y, float width, float height, float radius) |
| void | roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft) |
| void | roundRect(const QRectF &rect, float radius) |
| void | roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft) |
| void | setPathWinding(QCanvasPainter::PathWinding winding) |
| QCanvasPath | sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const |
| void | squeeze() |
| void | swap(QCanvasPath &other) |
| operator QVariant() const | |
| QCanvasPath & | operator=(QCanvasPath &&other) |
| QCanvasPath & | operator=(const QCanvasPath &path) |
No miembros relacionados
| bool | operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs) |
| bool | operator==(const QCanvasPath &lhs, const QCanvasPath &rhs) |
Descripción detallada
Un trazado de pintado es un objeto compuesto por una serie de bloques de construcción gráfica, como rectángulos, elipses, líneas y curvas. La API QCanvasPath se ajusta a QCanvasPainter path painting, facilitando el ajuste del código entre pintar directamente o pintar en un path. La principal razón para utilizar QCanvasPath es evitar recrear los trazados (estáticos) y poder almacenar en caché los búferes GPU de los trazados.
Comparado con QPainterPath, QCanvasPath está más optimizado para el renderizado con menos características para comparar o ajustar los trazados. En concreto:
- No hay métodos para la intersección o sustracción entre dos trazados.
- No hay métodos para traducir el trazado.
- No hay método para añadir texto.
- La regla de relleno es siempre
WindingFill(distinto de cero), no se admiteOddEvenFill.
Desde un punto de vista funcional, QCanvasPath es más similar a HTML Canvas Path2D, con algunas adiciones y la API coincidente con QCanvasPainter.
PathGroups y caché
Pintar trazados a través de QCanvasPath permite al motor almacenar en caché la geometría del trazado (vértices). Esto mejora el rendimiento de los trazados estáticos, a la vez que aumenta potencialmente el consumo de memoria de la GPU.
Cuando se pintan trazados utilizando fill() o stroke() que toman QCanvasPath como parámetro, es posible establecer un pathGroup como segundo parámetro. Esto define el búfer de la GPU donde se almacena en caché la ruta. Por defecto, pathGroup es 0, lo que significa que se utiliza el primer búfer. Establecer pathGroup a -1 significa que la ruta no asigna su propio búfer, y se utiliza el mismo búfer dinámico que con el pintado directo utilizando beginPath() seguido de comandos y fill/stroke.
La organización de los trazados en grupos de trazados permite optimizar eficazmente el rendimiento del renderizado y el uso de memoria de la GPU. Las rutas que van juntas y cambian a menudo al mismo tiempo deben estar en el mismo grupo para un uso óptimo del búfer.
Cuando la ruta cambia, su geometría (búfer de vértices) se actualiza automáticamente. Las cosas que causan una actualización de la geometría del grupo de rutas son:
- Borrar los elementos de la ruta o añadir nuevos elementos.
- Cambiar el ancho del trazo (QCanvasPainter::setLineWidth()).
- Ajustar la cantidad de antialiasing (QCanvasPainter::setAntialias()).
- Cambiar el tipo de límite de línea o de unión de línea (QCanvasPainter::setLineCap(), QCanvasPainter::setLineJoin()).
Tenga en cuenta que cambiar la transformación de estado (QCanvasPainter::transform(), QCanvasPainter::rotate() etc.) no invalida el trazado, por lo que mover/escalar/rotar un trazado almacenado en caché es muy eficiente.
En los casos en que la ruta ya no necesite ser pintada, o la aplicación deba liberar memoria de la GPU, la caché puede ser liberada llamando a QCanvasPainter::removePathGroup(). Esto no suele ser necesario, ya que las rutas almacenadas en caché se liberan automáticamente durante el destructor del pintor.
Véase también QCanvasPainter::addPath() y QCanvasPainter::removePathGroup().
Documentación de las funciones miembro
QCanvasPath::QCanvasPath()
Construye una ruta vacía.
[explicit] QCanvasPath::QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1)
Construye una ruta vacía, asignando espacio para commandsSize cantidad de comandos y opcionalmente commandsDataSize cantidad de datos. Si no se da el parámetro commandsDataSize, se reserva automáticamente espacio para 2 * commandsSize cantidad de datos, que es la cantidad óptima cuando los comandos de la ruta son líneas rectas (moveTo(), lineTo(), rect()).
Reservar el espacio correcto es una optimización para la creación de rutas y el uso de memoria. No es obligatorio, ya que el espacio suficiente se asegurará automáticamente al añadir comandos a la ruta.
Véase también reserve().
QCanvasPath::QCanvasPath(const QCanvasPath &path)
Construye una ruta que es una copia de la dada path.
QCanvasPath::QCanvasPath(QCanvasPath &&other)
Move-construye un nuevo QCanvasPath a partir de other.
[noexcept] QCanvasPath::~QCanvasPath()
Destruye el camino.
void QCanvasPath::addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
Añade path a esta ruta, utilizando opcionalmente transform para alterar los puntos de la ruta. Cuando no se proporciona transform (o es matriz de identidad), esta operación es muy rápida ya que reutiliza los datos de la ruta.
void QCanvasPath::addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
Añade path a la ruta actual, empezando por el comando en start e incluyendo count cantidad de comandos. Opcionalmente utiliza transform para alterar los puntos de la ruta. Se comprueba el rango de start y count, para que no se acceda a más comandos que QCanvasPath::commandsSize(). En caso de que la ruta no deba continuar desde la posición actual de la ruta, llame primero a moveTo() con path.positionAt(start - 1).
void QCanvasPath::arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
Crea un arco centrado en QPointF(centerX, centerY) con el valor radius, comenzando en un ángulo de a0 radianes y terminando en a1 radianes. El arco se extiende a lo largo de direction. Cuando connection es NotConnected, se cierra la trayectoria anterior y se inicia una nueva subtrayectoria.
void QCanvasPath::arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
Crea un arco centrado en centerPoint con el valor dado radius, comenzando en un ángulo de a0 radianes y terminando en a1 radianes. El arco abarca el direction dado. Cuando connection es NotConnected, se cierra la trayectoria anterior y se inicia una nueva subtrayectoria.
Se trata de una función sobrecargada.
void QCanvasPath::arcTo(float x1, float y1, float x2, float y2, float radius)
Crea un arco utilizando los puntos QPointF(x1, y1) y QPointF(x2, y2) con el dado radius.
void QCanvasPath::arcTo(QPointF point1, QPointF point2, float radius)
Crea un arco utilizando los puntos point1 y point2 con el radius dado.
Se trata de una función sobrecargada.
void QCanvasPath::beginHoleSubPath()
Iniciar una subtrayectoria de agujeros. Esto es equivalente a setPathWinding(QCanvasPainter::PathWinding::ClockWise))
Véase también beginSolidSubPath().
void QCanvasPath::beginSolidSubPath()
Iniciar un subcamino sólido. Equivale a setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))
Véase también beginHoleSubPath().
void QCanvasPath::bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y)
Añade una curva de Bézier cúbica entre la posición actual y el punto final especificado por x y y, utilizando los puntos de control especificados por cp1X, cp1Y, cp2X y cp2Y.
Una vez añadida la curva, la posición actual se actualiza para situarse en el punto final de la curva.
void QCanvasPath::bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
Añade una curva de Bézier cúbica entre la posición actual y el endPoint dado utilizando los puntos de control especificados por controlPoint1, y controlPoint2.
Después de añadir la curva, la posición actual se actualiza para estar en el punto final de la curva.
Se trata de una función sobrecargada.
void QCanvasPath::circle(float x, float y, float radius)
Añade un círculo con centro en QPointF(x, y) y el radius dado a la ruta.
void QCanvasPath::circle(QPointF centerPoint, float radius)
Añade un círculo con centro en centerPoint y el radius dado a la ruta.
Se trata de una función sobrecargada.
void QCanvasPath::clear()
Borra los comandos y datos de la ruta.
Llame a esto cuando los comandos de ruta cambian para volver a crear la ruta. Esto no afecta al uso de memoria, utilice reserve() y squeeze() para ello.
Véase también reserve() y squeeze().
void QCanvasPath::closePath()
Cierra la subtrayectoria actual trazando una línea hasta el principio de la subtrayectoria, iniciando automáticamente una nueva trayectoria.
qsizetype QCanvasPath::commandsCapacity() const
Devuelve la capacidad de comandos en la ruta.
Véase también commandsDataCapacity() y reserve().
qsizetype QCanvasPath::commandsDataCapacity() const
Devuelve la capacidad de datos de comandos en la ruta.
Véase también commandsCapacity() y reserve().
qsizetype QCanvasPath::commandsDataSize() const
Devuelve la cantidad de datos de comandos en la ruta.
Datos de comandos significa básicamente los puntos requeridos por los comandos.
Nota: Algunos elementos de la ruta requieren varios puntos de datos. Por ejemplo closePath requiere 0, moveTo y lineTo requieren 2, bezierCurveTo requiere 6 y roundRect requiere 34 puntos de datos.
qsizetype QCanvasPath::commandsSize() const
Devuelve la cantidad de comandos de la ruta.
Nota: Algunos elementos de la ruta requieren varios comandos. Por ejemplo moveTo y lineTo requieren el comando 1, bezierCurveTo requiere los comandos 6 y roundRect los comandos 10.
QPointF QCanvasPath::currentPosition() const
Devuelve la posición actual de la ruta. Es decir, la posición en la que finalizó el comando de ruta anterior (moveTo, lineTo, bezierCurveTo, etc.). Si la ruta está vacía, devuelve (0.0, 0.0).
void QCanvasPath::ellipse(float x, float y, float radiusX, float radiusY)
Crea una elipse centrada en (x, y), con radios definidos por radiusX, radiusY y la añade a la ruta como una sub-ruta cerrada.
void QCanvasPath::ellipse(const QRectF &rect)
Crea una elipse dentro del rectángulo rect y la añade al trazado como un subtrazado cerrado.
Se trata de una función sobrecargada.
bool QCanvasPath::isEmpty() const
Devuelve true cuando la ruta está vacía.
Véase también clear.
void QCanvasPath::lineTo(QPointF point)
Añade una línea recta desde la posición actual hasta la dirección point. Después de dibujar la línea, la posición actual se actualiza para estar en el punto final de la línea.
Se trata de una función sobrecargada.
void QCanvasPath::lineTo(float x, float y)
Dibuja una línea desde la posición actual hasta el punto (x, y).
Se trata de una función sobrecargada.
void QCanvasPath::moveTo(QPointF point)
Mueve el punto actual a la dirección point, iniciando implícitamente un nuevo subcamino y cerrando el anterior.
Se trata de una función sobrecargada.
void QCanvasPath::moveTo(float x, float y)
Mueve la posición actual a (x, y) e inicia un nuevo subcamino, cerrando implícitamente el camino anterior.
Se trata de una función sobrecargada.
QPointF QCanvasPath::positionAt(qsizetype index) const
Devuelve la posición de la ruta en index. Esto significa la posición donde el comando de ruta (moveTo, lineTo, bezierCurveTo etc.) se encuentra en index. El índice tiene que estar entre 0 y commandsSize() - 1. Cuando la ruta está vacía, devuelve (0.0, 0.0).
void QCanvasPath::quadraticCurveTo(float cpX, float cpY, float x, float y)
Añade una curva de Bézier cuadrática entre el punto actual y el punto final (x, y) con el punto de control especificado por (cpX, cpY).
void QCanvasPath::quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
Añade una curva de Bézier cuadrática entre la posición actual y el endPoint dado con el punto de control especificado por controlPoint.
Se trata de una función sobrecargada.
void QCanvasPath::rect(float x, float y, float width, float height)
Crea un rectángulo situado en QPointF(x, y) con los datos width y height.
void QCanvasPath::rect(const QRectF &rect)
Crea un rectángulo especificado por rect
Se trata de una función sobrecargada.
void QCanvasPath::reserve(qsizetype commandsSize, qsizetype commandsDataSize)
Reserva una determinada cantidad de espacio en la memoria interna de QCanvasPath.
Intenta asignar memoria para al menos commandsSize comandos y commandsDataSize puntos de datos. Algunos elementos de la ruta requieren varios comandos, véase commandsSize() y commandsDataSize().
Reservar el espacio correcto es una optimización para la creación de rutas y el uso de memoria. No es obligatorio, ya que el espacio suficiente se garantizará automáticamente al añadir comandos a la ruta.
Véase también squeeze(), commandsCapacity() y commandsDataCapacity().
void QCanvasPath::reserve(qsizetype commandsSize)
Reserva una determinada cantidad de espacio en la memoria interna de QCanvasPath.
Intenta asignar memoria para al menos commandsSize comandos. Algunos elementos de ruta requieren varios comandos, véase commandsSize() y commandsDataSize().
El espacio se reserva automáticamente para 2 * commandsSize cantidad de datos, que es la cantidad óptima cuando los comandos de ruta son líneas rectas (moveTo(), lineTo(), rect()).
Reservar el espacio correcto es una optimización para la creación de rutas y el uso de memoria. No es obligatorio, ya que el espacio suficiente se asegurará automáticamente al añadir comandos a la ruta.
Se trata de una función sobrecargada.
Véase también squeeze(), commandsCapacity(), y commandsDataCapacity().
void QCanvasPath::roundRect(float x, float y, float width, float height, float radius)
Añade a la ruta el rectángulo x, y, width, height con esquinas redondeadas. Las esquinas son cuartos de círculo con el valor radius.
void QCanvasPath::roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
Añade el rectángulo x, y, width, height con esquinas redondeadas a la ruta. Las esquinas son cuartos de círculo con radios radiusTopLeft, radiusTopRight radiusBottomRight y radiusBottomLeft, respectivamente.
void QCanvasPath::roundRect(const QRectF &rect, float radius)
Añade a la ruta el rectángulo rect con esquinas redondeadas. Las esquinas son cuartos de círculo con el valor radius.
Esta es una función sobrecargada.
void QCanvasPath::roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
Añade el rectángulo rect con esquinas redondeadas a la ruta. Las esquinas son cuartos de círculo con radios radiusTopLeft, radiusTopRight radiusBottomRight y radiusBottomLeft, respectivamente.
Se trata de una función sobrecargada.
void QCanvasPath::setPathWinding(QCanvasPainter::PathWinding winding)
Establece la sub-ruta actual winding a QCanvasPainter::CounterClockWise (por defecto) o QCanvasPainter::ClockWise. CounterClockWise dibuja sub-rutas sólidas mientras que ClockWise dibuja agujeros.
Nota: Este es un comando, similar a lineTo, moveTo, etc., y por lo tanto establecer el devanado debe hacerse antes que el resto de los comandos a los que se pretende aplicar el devanado cambiado.
QCanvasPath QCanvasPath::sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const
Devuelve una nueva ruta que contiene los comandos de esta ruta, empezando por el comando en start e incluyendo count cantidad de comandos, opcionalmente usando transform para alterar los puntos de la ruta.
Se comprueba el rango de start y count, para que no se acceda a más comandos que commandsSize(). En caso de que el comando en start no sea MoveTo, el primer comando será reemplazado por MoveTo para que esta rebanada sea una ruta individual.
void QCanvasPath::squeeze()
Libera la memoria que no sea necesaria para almacenar los comandos y datos de la ruta. Esto puede utilizarse para reducir el uso de memoria después de llamar a reserve().
Normalmente no es necesario utilizarlo, pero puede ser útil cuando el tamaño de la ruta ha sido grande debido a la reserva o adición de muchos elementos (lineTo, bezierCurveTo etc.) y luego se espera que el tamaño sea mucho menor en el futuro por lo que llamar primero a reserve() y luego a squeeze(), liberará algo de memoria.
Véase también reserve().
[noexcept] void QCanvasPath::swap(QCanvasPath &other)
Intercambia esta ruta con other. Esta operación es muy rápida y nunca falla.
QCanvasPath::operator QVariant() const
Devuelve la ruta como QVariant.
[noexcept] QCanvasPath &QCanvasPath::operator=(QCanvasPath &&other)
Mover-asigna other a esta instancia QCanvasPath.
QCanvasPath &QCanvasPath::operator=(const QCanvasPath &path)
Asigna el path dado a esta ruta y devuelve una referencia a esta ruta.
No miembros relacionados
[noexcept] bool operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs)
Devuelve true si la ruta lhs es diferente de rhs; false en caso contrario.
Véase también operator==().
[noexcept] bool operator==(const QCanvasPath &lhs, const QCanvasPath &rhs)
Devuelve true si la ruta lhs es igual a rhs; false en caso contrario.
Véase también operator!=().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.